#include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <time.h> pthread_cond_t c; void *test(void *param){ int retval; int *sleepTime = (int *)param; pthread_condattr_t attr; struct timespec to; pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER; pthread_condattr_init( &attr); pthread_condattr_setclock( &attr, CLOCK_MONOTONIC); pthread_cond_init( &c, &attr); while(1){ if ((retval = pthread_mutex_lock(&m))) { printf("pthread_mutex_lock lock fail fun=%s line=%d\n",__FUNCTION__,__LINE__); break; } clock_gettime(CLOCK_MONOTONIC, &to); to.tv_sec += *sleepTime; printf("sleep time is %d sec fun=%s line=%d\n",*sleepTime, __FUNCTION__, __LINE__); pthread_cond_timedwait(&c, &m, &to); if ((retval = pthread_mutex_unlock(&m))) { printf("pthread_mutex_unlock unlock fail fun=%s line=%d\n",__FUNCTION__,__LINE__); break; } } pthread_exit(0); } int main(){ pthread_t tid; pthread_attr_t attr; int sleepTime = 5; pthread_attr_init(&attr); pthread_create(&tid, &attr, test, &sleepTime); printf("@@@ please input sleep time\n"); while(1){ scanf("%d",&sleepTime); printf("sleep time change to %d sec\n",sleepTime); pthread_cond_signal(&c); } return 0; }編譯指令: g++ test3.cpp -lpthread -lrt -o test
2019年1月30日 星期三
pthread_cond_timedwait pthread_cond_signal 用法
改變另一個thread的睡眠時間
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言