gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:44:45 26 4
gpt4 key购买 nike

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com