簡體   English   中英

使用pthreads()創建和管理線程

[英]Creating and managing threads with pthreads()

我瀏覽了網絡上不同的pthread教程。 這里這里這里等等。 但是有一個問題仍然沒有答案,並且想知道是否有人可以澄清它。

題:

  • 假設我要打印ababababa 並假設thread1正在打印athread2正在打印b 這意味着thread1執行,然后將控制權thread2thread2 然后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 + = 10sum-= 5是關鍵部分。 現在實現彼得森算法,並查看輸出。

這是演示彼得森算法工作的最佳示例。

好。 所以我發現我的兩個假設都是錯誤的。 原因我假設創建的線程將串行執行。 但是在創建線程時,操作系統將隨機並行執行線程。 所以我實現了如下:

create_thread1(call function1)
create_thread2(call function2)

function1(){
  loop
}

function1(){
  loop
}

部分答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM