国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

理解線程1 C語言示例的程序

lncwwn / 1938人閱讀

摘要:一個簡單的語言實現的線程示例在看時,為了更好的理解線程的概念,書中列舉了這樣一個小例子將程序編譯鏈接后運行,可以看到下面這樣的結果這里使用創建新線程,的定義如下根據要求,只有一個指向的指針作為參數,返回的也是指向的指針。

一個簡單的C語言實現的線程示例

在看《Beginning Linux Programming》時,為了更好的理解線程的概念,書中列舉了這樣一個小例子:

#include 
#include 
#include 
#include 
#include 

void *thread_function(void *arg);
char message[] = "Hello World";

int main() {
  int res;
  pthread_t a_thread;
  void *thread_result;

  res = pthread_create(&a_thread, NULL, thread_function, (void *)message);
  if (res != 0) {
    perror("Thread creation failed");
    exit(EXIT_FAILURE);
  }
  printf("Waiting for thread to finish...
");
  res = pthread_join(a_thread, &thread_result);
  if (res != 0) {
    perror("thread join failed");
    exit(EXIT_FAILURE);
  }
  printf("Thread joined, it returned %s
", (char *)thread_result);
  printf("Message is now %s
", message);
  exit(EXIT_SUCCESS);
}

void *thread_function(void *arg) {
  printf("thread_function is running, Argument was %s
", (char *)arg);
  sleep(3);
  strcpy(message, "Bye!");
  pthread_exit("Thank you for the CPU time");
}

將程序編譯鏈接后運行,可以看到下面這樣的結果

?  chapter12 ./thread
Waiting for thread to finish...
thread_function is running, Argument was Hello World
Thread joined, it returned Thank you for the CPU time
Message is now Bye!

這里使用 pthread_create 創建新線程, pthread_create 的定義如下:

#include 

int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);

根據 pthread_create 要求, thread_function 只有一個指向void的指針作為參數,返回的也是指向void的指針。
當創建新的線程后,新線程在 thread_function 中開始執行,打印自己的參數。
原有線程在確保新線程啟動后調用 pthread_join 函數等到線程結束,并且將新線程的返回值存在 thread_result 指針里。
新線程可以直接訪問 message 數組變量,如果是調用 fork() 的話就沒有這種效果。

python也提供了處理線程相關的 thread 和 基于它上面抽象的 threading 等模塊,將在以后的文章中探究。

不由感慨,如果不多懂一些C語言,那么很難提高自己Python水平啊。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44263.html

相關文章

  • [Java并發-2]Java如何解決可見性問題

    摘要:誕生之處就支持多線程,所以自然有解決這些問題的辦法,而且在編程語言領域處于領先地位。,線程規則這條是關于線程啟動的。在語言里面,的語義本質上是一種可見性,意味著事件對事件來說是可見的,無論事件和事件是否發生在同一個線程里。 之前我們說了:1,可見性2,原子性3,有序性3個并發BUG的之源,這三個也是編程領域的共性問題。Java誕生之處就支持多線程,所以自然有解決這些問題的辦法,而且在編...

    lk20150415 評論0 收藏0
  • 理解線程3 c語言示例線程基本操作

    摘要:基本線程的動作繼續之前語言線程的文章文章文章來了解基本的線程操作。屬性用完后對其進行清理回收通過共享的變量來檢測子線程是否已經結束代碼如下設置調度屬性線程庫提供以下調度策略先進先出調度。 基本線程的動作 繼續之前C語言線程的文章:文章1 文章2 來了解基本的線程操作。 設置線程屬性 設置脫離狀態 下面代碼中關鍵的地方在于: 通過 res = pthread_attr_init(...

    A Loity 評論0 收藏0
  • 雙重檢查鎖定與延遲初始化

    摘要:基于的雙重檢查鎖定的解決方案對于前面的基于雙重檢查鎖定來實現延遲初始化的方案指示例代碼,我們只需要做一點小的修改把聲明為型,就可以實現線程安全的延遲初始化。 雙重檢查鎖定的由來 在java程序中,有時候可能需要推遲一些高開銷的對象初始化操作,并且只有在使用這些對象時才進行初始化。此時程序員可能會采用延遲初始化。但要正確實現線程安全的延遲初始化需要一些技巧,否則很容易出現問題。比如,下...

    yvonne 評論0 收藏0
  • JS高級入門教程

    摘要:解析首先簡稱是由歐洲計算機制造商協會制定的標準化腳本程序設計語言。級在年月份成為的提議,由核心與兩個模塊組成。通過引入統一方式載入和保存文檔和文檔驗證方法對進行進一步擴展。其中表示的標記位正好是低三位都是。但提案被拒絕了。 JS高級入門教程 目錄 本文章定位及介紹 JavaScript與ECMAScript的關系 DOM的本質及DOM級介紹 JS代碼特性 基本類型與引用類型 JS的垃...

    zsy888 評論0 收藏0

發表評論

0條評論

lncwwn

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<