我的应用程序有多个由pthread_create创build的线程。 现在,所有其他的线程都需要等待一个特定的线程改变状态,例如:一个状态线程正在监视系统状态,如果它准备好了,则告诉其他线程开始工作。 我如何在Linux中用C实现这个?
=== sudo代码===
static int status = 0; static pthread_mutex_t status_mutex = PTHREAD_MUTEX_INITIALIZER; void good_to_go( void ) { pthread_mutex_lock( &status_mutex ); status = 1; pthread_mutex_unlock( &status_mutex ); } void stop_doingg( void ) { pthread_mutex_lock( &status_mutex ); status = 0; pthread_mutex_unlock( &status_mutex ); } int is_good_to_go( void ) { int temp; pthread_mutex_lock( &status_mutex ); temp = status; pthread_mutex_unlock( &status_mutex ); return temp; }
然后:
void *run_thread(void *ptr) { if (is_monitor_thread) { while (check_system_status() < 0) { sleep (1); } good_to_go(); } else { //below while loop looks ugly. //is there a way to get notified once "status" is changed to 1? while( !is_light_turned_on() ) { sleep (1); } }
你正在寻找条件变量。
请参阅以下手册页:
pthread_cond_init() pthread_cond_signal() pthread_cond_broadcast()