gpt4 book ai didi

c++ - Pthread 阻塞/可更新计时器

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:32:22 32 4
gpt4 key购买 nike

我目前正在使用 pthreads,并且我的一个线程中有一个 run() 方法。 run() 方法检查 vector 的第一个元素的开始时间,并且需要进行阻塞 sleep 直到到达该时间,以允许其他线程执行。问题是 vector 的前面元素可以更新,我需要在我的 run() 方法中重置计时器。我不太确定如何处理这个问题。我不能使用 sleep ,因为它会等到它上次检查的开始时间,这可能已经更新到更早的时间。

最佳答案

您可以使用 pthread_kill() 唤醒在 sigtimedwait() 中休眠的特定线程。

sigset_t _fSigMask; // global sigmask

我们在创建线程之前执行此操作。线程从创建它们的线程继承它们的信号掩码。我们使用 SIGUSR1 来通知我们的线程。其他信号可用。

sigemptyset(&_fSigMask);
sigaddset(&_fSigMask, SIGUSR1);
sigaddset(&_fSigMask, SIGSEGV);

然后休眠一个线程:

int nSig;
struct timespec tmTimeout = { nSec, nNanoSec }; // from your vector of times
sigtimedwait(&fSigMask, &nSig, &tmTimeout);

然后唤醒线程,pThread,只需给它发信号:

pthread_kill(pThread, SIGUSR1);

顺便说一句,在我们的测试中,以这种方式休眠和唤醒我们的线程比使用条件变量快很多倍。

关于c++ - Pthread 阻塞/可更新计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10525496/

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