[問題] sleep or nop 的選擇

看板C_and_CPP作者 (冰淇淋乾杯)時間14年前 (2011/04/19 04:50), 編輯推噓4(4010)
留言14則, 7人參與, 最新討論串1/1
開發平台(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

04/19 13:21, , 1F
在 for 迴圈跑完之後,所有的 create 不都已經完成了嗎?
04/19 13:21, 1F

04/19 13:28, , 2F
其實並沒有,該行是執行了,但thread卻還沒完整create
04/19 13:28, 2F

04/19 13:29, , 3F
通常會需要等待一小段的時間,但是卻不知道是多久時間
04/19 13:29, 3F

04/19 13:46, , 4F
就 pthread_join 就好啦, 如果沒有別的等待條件, 至少他們
04/19 13:46, 4F

04/19 13:47, , 5F
結束前, main thread 也不能結束
04/19 13:47, 5F

04/19 13:59, , 6F
請用 condition variable,sleep 多久都是錯的
04/19 13:59, 6F

04/19 14:01, , 7F
我想問原po說「並不一定會馬上create完成」是真有其事嗎?
04/19 14:01, 7F

04/19 14:19, , 8F
condition variable, 檢查一遍沒全部準備好就 asm("pause")
04/19 14:19, 8F

04/19 14:20, , 9F
一直到全部都準備好吧, OS 的 proc_sched 通常是這樣寫的(煙)
04/19 14:20, 9F

04/19 14:48, , 10F
create thread就算有時間也不用幾個ns吧
04/19 14:48, 10F

04/19 16:34, , 11F
那我知道該怎麼處理了,謝謝各位的回覆
04/19 16:34, 11F

04/19 16:35, , 12F
關於j大的疑問,這個是在實測的過程中發現到的問題
04/19 16:35, 12F

04/19 16:35, , 13F
我這邊也只能給予這樣的回覆,但更詳細的情況並不確定
04/19 16:35, 13F

04/19 21:30, , 14F
create 完就完成, 但是不一定開始執行吧 要看優先權摟
04/19 21:30, 14F
文章代碼(AID): #1DhHIfkg (C_and_CPP)