最近,我了解了EventWaitHandle在C#中的强大功能,并决定在姊妹应用程序中移动某些功能以实现相同功能。唯一的问题是姊妹应用程序是用C编写的。

没什么大不了的,我使用的是pthreads,它的pthread_cond_t数据类型可以发出信号。我唯一的问题是,是否有可能在某些等待之前将信号“信号化”?

现在我的测试说不。也就是说,如果ThreadA在ThreadB等待之前触发信号,则ThreadB将无限期等待。我是否可以使用另一种pthread类型,其行为更接近于C#中的EventWaitHandle的功能?用信号通知对象,这意味着等待该对象的第一个线程将立即通过,并将其设置为未签名。

将pthread_cond包装成另一个数据结构并不难实现。但是,再次说明,该功能已经在pthread库中提供了吗?

最佳答案

如果您正确使用条件变量,那将无关紧要。

您的代码的基本流程应为(伪代码):

lock(lockobj);
while (!signalled) {
    wait(condvar);
}
signalled = false;
unlock(lockobj);

在等待方面,以及:
lock(lockobj);
signalled = true;
notify(condvar);
unlock(lockobj);

在信令端。 (当然,使用的锁对象和条件变量在两侧必须相同。)希望这会有所帮助!

关于c# - pthread_cond_t的EventWaitHandle行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/143063/

10-10 13:16