看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux 想請問一下 主程式建立一個thread因為要偵測某一個旗標的變化 所以用while迴圈一直偵測 但如果沒有nanosleep的話 cpu loading會飆很高 有時候會到100% 想請問一下 除了sleep之外還有其他辦法讓cpu loading不會這麼高嗎? 謝謝!! int flag_detect_exit = 0; void* detect_thread(void *p) { struct timespec ts; ts.tv_sec=0; ts.tv_nsec=10000000; // 10 milliseconds while(!flag_detect_exit) { do_something(); //nanosleep(&ts, NULL); } } int main(int argc, char* argv[]) { pthread_attr_t detect_attr; pthread_t detect_thread_t; pthread_attr_init(&detect_attr); pthread_attr_setdetachstate(&detect_attr,PTHREAD_CREATE_DETACHED); pthread_create(&detect_thread_t , &detect_attr , &detect_thread , NULL); pthread_attr_destroy(&detect_attr); while(1) { sleep(1); } return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.181.187
jackylu63:Busy waiting當然會使cpu usage飇高 11/13 00:42
jackylu63:請愛用synchorization機制 11/13 00:43
jackylu63:如Semaphore, mutex... 11/13 00:44
akasan:pthread_cond 也不錯 11/13 00:51