我收到发送到信号量的段错误。实际的崩溃发生在这一行:
sem_post(flag);
这是我正在使用的代码:
//global variable for the use of all threads:
sem_t *flag= NULL;
//in main,before creating the threads:
sem_init(flag,0,1);
//in function of the threads :
sem_post(flag);
我还尝试简单地使用全局信号量来代替指向信号量的指针。我该如何解决这个问题?
最佳答案
我相信您使用 sem_t *
类型的方式看似合理但不正确。您不想让信号量本身成为 sem_t *
(这意味着“我不是 sem_t
,但我可以告诉您信号量在哪里”),您会希望这样信号量的类型为 sem_t
。
因此,当您调用 sem_init
时,您需要传入信号量的地址,如下所示:
sem_init(&flag, 0, 1);
同样,要发布到信号量,您需要编写
sem_post(&flag);
让我们将其与您现在正在做的事情进行对比。通过将 flag
设为指向 NULL
的 sem_t *
,您是在说“我指向一个信号量,只不过我实际上不是指着一个。”调用 sem_init 并传入空指针是一个错误 - 这意味着“请在空指针指向的位置构造一个信号量”,这在语义上是不正确的。您发生的崩溃是因为您类似地说“请发布到此空指针指向的信号量”。通过将一个诚实的信号量对象传递给函数,您可以说“这是我的信号量 - 请用它做一些好事。”
关于c - sem_post(flag) 上的段错误运行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56776759/