sem_post(flag)上的分段故障运行时间

时间:2019-06-26 15:52:49

标签: 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);

我也尝试仅使用全局信号量-代替-指向信号量的指针。我该如何解决?

1 个答案:

答案 0 :(得分:2)

我相信您正在使用sem_t *类型,这是合理但不正确的。与其让信号量本身为sem_t *,而是意味着“我不是sem_t,但我可以告诉您信号量在哪里,”您希望该信号量具有类型{{1 }}。

因此,当您致电sem_t时,您需要传递信号量的地址,如下所示:

sem_init

类似地,要发布到信号量,您将要写

sem_init(&flag, 0, 1);

让我们与您现在正在做的事情形成对比。通过将sem_post(&flag); 设为指向flag的{​​{1}},您的意思是“我指向一个信号量,除了我实际上没有指向一个。”调用sem_t *并传入空指针是一个错误-这意味着“请在空指针所指向的位置构造一个信号灯”,这在语义上是错误的。之所以发生崩溃,是因为您在说类似的话“请张贴到此空指针指向的信号量上”。通过转而拥有一个诚实至善的信号灯对象,然后将其传递给函数,您的意思是“这是我的信号灯-请用它做些好事。”