Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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
Multithreading 是否存在类似于pthread_cond_timedwait的定时信号?_Multithreading_Pthreads - Fatal编程技术网

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周期,所以我想要一个外部进程来给线程发信号。这可能吗??