c - sem_post(flag) 上的段错误运行时间

标签 c linux semaphore

我收到发送到信号量的段错误。实际的崩溃发生在这一行:

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 设为指向 NULLsem_t *,您是在说“我指向一个信号量,只不过我实际上不是指着一个。”调用 sem_init 并传入空指针是一个错误 - 这意味着“请在空指针指向的位置构造一个信号量”,这在语义上是不正确的。您发生的崩溃是因为您类似地说“请发布到此空指针指向的信号量”。通过将一个诚实的信号量对象传递给函数,您可以说“这是我的信号量 - 请用它做一些好事。”

关于c - sem_post(flag) 上的段错误运行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56776759/

相关文章:

c - Nsight Eclipse 5.5 标识符未定义

linux - 全局变量但仍然无法在 linux 中访问

linux - 使用 youtube-dl 和 mplayer 的 YouTube 视频流脚本出现 "Unknown option on the command line: -gf"错误的终端

c - 在多对象/结构 X11 显示的情况下如何从窗口中删除对象?

c - 无法在 C 中正确使用结构指针

linux - 无法从配置文件访问关联

c - 确保 child 在 parent 结束之前完成

c - 检查信号量值时是什么阻止了竞争条件?

java - 信号量和 Java 计数

c - 结构到结构赋值后的奇怪错误