Multithreading 是否存在类似于pthread_cond_timedwait的定时信号?
我已经创建了许多线程,它们都在等待自己的条件。每个线程在运行时都会发出其下一个条件的信号,并再次进入等待状态 但是,我希望当前正在运行的线程应该在指定的时间段(非常短的时间段)后发出其下一个条件的信号。如何做到这一点Multithreading 是否存在类似于pthread_cond_timedwait的定时信号?,multithreading,pthreads,Multithreading,Pthreads,我已经创建了许多线程,它们都在等待自己的条件。每个线程在运行时都会发出其下一个条件的信号,并再次进入等待状态 但是,我希望当前正在运行的线程应该在指定的时间段(非常短的时间段)后发出其下一个条件的信号。如何做到这一点 void *threadA(void *t) { while(i<100) { pthread_mutex_lock(&mutex1); while (state != my_id ) {
void *threadA(void *t)
{
while(i<100)
{
pthread_mutex_lock(&mutex1);
while (state != my_id )
{
pthread_cond_wait(&cond[my_id], &mutex1);
}
// processing + busy wait
/* Set state to i+1 and wake up thread i+1 */
pthread_mutex_lock(&mutex1);
state = (my_id + 1) % NTHREADS;//usleep(1);
// (Here I don't want this sleep. I want that this thread completes it processing and signals next thread a bit later.)
/*nanosleep(&zero, NULL);*/
pthread_cond_signal(&cond[(my_id + 1) % NTHREADS]); // Send signal to Thread (i+1) to awake
pthread_mutex_unlock(&mutex1);
i++;
}
void*threadA(void*t)
{
而(i如果条件上没有任何东西在等待,则发送信号通知条件不会起任何作用。因此,如果pthread'x'发送信号通知条件'cx',然后等待它,它将等待很长时间…除非其他线程也发送信号通知'cx'
我不太清楚您所说的pthread发出“下一个条件”信号是什么意思,但我突然意识到,等待发出信号的线程与发出信号后休眠的线程之间没有太大区别?我的当前线程(假设为0)在条件0上等待,而线程1在条件1上等待。现在,在处理线程0之后,我想发信号通知条件1,以便线程1可以继续,但就在发信号之前,我想安排另一个进程(即我想等待一点)。在我当前的代码中,我使用了usleep。但是在这种情况下,在睡眠结束后,当前线程将被调度,稍后它将发出下一个线程的信号。我不想要这个。嗯…在“\\processing and busy wait
之前缺少一个pthread\u mutex\u unlock()
。如果您不想在当前线程中延迟的话(例如0)在踢下一个(线程1)之前,然后我建议你在线程唤醒时加入延迟。如果你不想在任何一个线程中实现延迟,那么你需要一个辅助线程来负责踢线程1,并在适当的时候这样做。是的,这就是我想的。你能帮我怎么做吗?还有,问题是我在一个非常精细的级别上工作,我不想浪费CPU周期,所以我想要一个外部进程来给线程发信号。这可能吗??