gpt4 book ai didi

c# - pthread_cond_t 的 EventWaitHandle 行为

转载 作者:太空宇宙 更新时间:2023-11-04 01:43:21 24 4
gpt4 key购买 nike

我最近在 C# 中看到了 EventWaitHandle 的强大行为,并决定在姊妹应用程序中移动一些功能来实现同样的功能。唯一的问题是姊妹应用是用 C 语言编写的。

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

现在我的测试表明没有。也就是说,如果 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/

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