看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux, GCC 4.4.3 問題(Question): 我目前有一個程式會在main程式一開始會create很多thread出來 create方式大概會像下面: int main() { pthread_t pid_array[10]; for (int i = 0; i < 10; i++) { pthread_create(&pid_array[i], NULL, func_to_do, NULL); } ..... ..... ..... } 而一般情況下,我們在使用pthread_create的時候,並不一定會馬上create完成 通常會需要等待一小段時間,才會把所有thread create完成 可是並不清楚會等待多久的時間 而我目前要做一的等待thread create完成的程式段,來避免沒有create好的問題 我目前有兩個方式可以做:sleep or nop sleep的部份,我採用的是nanosleep,delay的時間給予500ns nop的部份,我是直接使用C-inline asm的方式 sleep part: int main() { pthread_t pid_array[10]; for (int i = 0; i < 10; i++) { pthread_create(&pid_array[i], NULL, func_to_do, NULL); } nanosleep(&timedelay, NULL); ..... ..... } nop part: int main() { pthread_t pid_array[10]; for (int i = 0; i < 10; i++) { pthread_create(&pid_array[i], NULL, func_to_do, NULL); } asm("nop"); //只插一個nop而已 ..... ..... } 請問一下,哪一種方式不會浪費太多的等待時間呢? 還請各位先進指點一下,謝謝 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.105.91
james732:在 for 迴圈跑完之後,所有的 create 不都已經完成了嗎? 04/19 13:21
septemhill:其實並沒有,該行是執行了,但thread卻還沒完整create 04/19 13:28
septemhill:通常會需要等待一小段的時間,但是卻不知道是多久時間 04/19 13:29
ledia:就 pthread_join 就好啦, 如果沒有別的等待條件, 至少他們 04/19 13:46
ledia:結束前, main thread 也不能結束 04/19 13:47
avhacker:請用 condition variable,sleep 多久都是錯的 04/19 13:59
james732:我想問原po說「並不一定會馬上create完成」是真有其事嗎? 04/19 14:01
scwg:condition variable, 檢查一遍沒全部準備好就 asm("pause") 04/19 14:19
scwg:一直到全部都準備好吧, OS 的 proc_sched 通常是這樣寫的(煙) 04/19 14:20
final01:create thread就算有時間也不用幾個ns吧 04/19 14:48
septemhill:那我知道該怎麼處理了,謝謝各位的回覆 04/19 16:34
septemhill:關於j大的疑問,這個是在實測的過程中發現到的問題 04/19 16:35
septemhill:我這邊也只能給予這樣的回覆,但更詳細的情況並不確定 04/19 16:35
TroyLee:create 完就完成, 但是不一定開始執行吧 要看優先權摟 04/19 21:30