Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何将POSIX信号量值设置为1?_C_Posix_Semaphore_Binary Semaphore - Fatal编程技术网

C 如何将POSIX信号量值设置为1?

C 如何将POSIX信号量值设置为1?,c,posix,semaphore,binary-semaphore,C,Posix,Semaphore,Binary Semaphore,我正在用c语言实现信号量。我有一个POSIX计数信号量。我想给它赋值。我不想用Wait或Post。我可以这样做吗? POSIX信号量是否有类似setValue的函数?等待和Post是经典信号量支持的唯一操作。POSIX信号量可以使用sem_init使用计数进行初始化。任何类型的“setValue”函数都会破坏信号量的功能,因为它允许单元“丢失”,例如,在另一个线程调用“setValue”之前被一个线程发布 这是一个非常糟糕的想法,这就是为什么它没有实现。如果您可以在正常操作期间直接更改它的值,即

我正在用c语言实现信号量。我有一个POSIX计数信号量。我想给它赋值。我不想用Wait或Post。我可以这样做吗?
POSIX信号量是否有类似setValue的函数?

等待和Post是经典信号量支持的唯一操作。POSIX信号量可以使用sem_init使用计数进行初始化。任何类型的“setValue”函数都会破坏信号量的功能,因为它允许单元“丢失”,例如,在另一个线程调用“setValue”之前被一个线程发布


这是一个非常糟糕的想法,这就是为什么它没有实现。

如果您可以在正常操作期间直接更改它的值,即除了初始化之外,它将不再是信号量。所以您可能在寻找不同的东西,可能是线程安全计数器/共享变量?这些更复杂的共享对象通常是用基本的同步原语实现的,比如锁/互斥体/信号量等。使用哪一个取决于您想要实现什么

OTOH,你可能在展示一个。也许,如果您陈述了您真正想要实现的目标,我们可以为您指出一个更好/更容易/的解决方案。

@FilipeGonçalves:对已经初始化的信号量调用sem_init会导致未定义的行为。您可以先销毁它,但如果在销毁它时可以并发发布或等待,则也会导致未定义的行为。基本上OP所要求的是完全错误的。