作者septemhill (冰淇淋乾杯)
看板C_and_CPP
標題[問題] sleep or nop 的選擇
時間Tue Apr 19 12:50:46 2011
開發平台(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