[英]Creating and managing threads with pthreads()
我瀏覽了網絡上不同的pthread教程。 這里 , 這里和這里等等。 但是有一個問題仍然沒有答案,並且想知道是否有人可以澄清它。
ababababa
。 並假設thread1
正在打印a
, thread2
正在打印b
。 這意味着thread1
執行,然后將控制權thread2
給thread2
。 然后thread2
打印b
並將控制權移交給thread1
,依此類推。 在這種情況下,是否可以創建兩個線程並在執行特定次數(使用線程ID或某些內置函數?)的循環內一次調用每個線程? 還是我每次必須使用循環創建兩個線程? 例如:我應該做類似的事情:
create_thread1()
create_thread2()
for loop
call thread1()
call thread2
還是我應該做類似的事情:
for loop
create_thread1() to do something
create_thread2() to do something
編輯:我從問題中刪除了部分細節,因為用戶認為這是問題。
編輯:代碼
void *func(void *arg){
int i;
while(i<30){
printf("%s\n",(char *)arg);
i++;
}
return 0;
}
int main(int argc, char *argv[]){
pthread_t thread1, thread2;
int rt1, rt2;
rt1 = pthread_create(&thread1, NULL, &func, "a");
rt2 = pthread_create(&thread2, NULL, &func, "b");
sleep(1);
return;
}
有一個全局變量之和在線程1加10 總結了1000次,在線程2減去5從總和 1000倍。 運行兩個線程並查看輸出。 比賽條件將會發生。 彼得森的算法是避免競爭條件。 其中sum + = 10和sum-= 5是關鍵部分。 現在實現彼得森算法,並查看輸出。
這是演示彼得森算法工作的最佳示例。
好。 所以我發現我的兩個假設都是錯誤的。 原因我假設創建的線程將串行執行。 但是在創建線程時,操作系統將隨機並行執行線程。 所以我實現了如下:
create_thread1(call function1)
create_thread2(call function2)
function1(){
loop
}
function1(){
loop
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.