摘要:一個簡單的語言實現的線程示例在看時,為了更好的理解線程的概念,書中列舉了這樣一個小例子將程序編譯鏈接后運行,可以看到下面這樣的結果這里使用創建新線程,的定義如下根據要求,只有一個指向的指針作為參數,返回的也是指向的指針。
一個簡單的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 的定義如下:
#includeint 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
摘要:誕生之處就支持多線程,所以自然有解決這些問題的辦法,而且在編程語言領域處于領先地位。,線程規則這條是關于線程啟動的。在語言里面,的語義本質上是一種可見性,意味著事件對事件來說是可見的,無論事件和事件是否發生在同一個線程里。 之前我們說了:1,可見性2,原子性3,有序性3個并發BUG的之源,這三個也是編程領域的共性問題。Java誕生之處就支持多線程,所以自然有解決這些問題的辦法,而且在編...
摘要:基本線程的動作繼續之前語言線程的文章文章文章來了解基本的線程操作。屬性用完后對其進行清理回收通過共享的變量來檢測子線程是否已經結束代碼如下設置調度屬性線程庫提供以下調度策略先進先出調度。 基本線程的動作 繼續之前C語言線程的文章:文章1 文章2 來了解基本的線程操作。 設置線程屬性 設置脫離狀態 下面代碼中關鍵的地方在于: 通過 res = pthread_attr_init(...
摘要:基于的雙重檢查鎖定的解決方案對于前面的基于雙重檢查鎖定來實現延遲初始化的方案指示例代碼,我們只需要做一點小的修改把聲明為型,就可以實現線程安全的延遲初始化。 雙重檢查鎖定的由來 在java程序中,有時候可能需要推遲一些高開銷的對象初始化操作,并且只有在使用這些對象時才進行初始化。此時程序員可能會采用延遲初始化。但要正確實現線程安全的延遲初始化需要一些技巧,否則很容易出現問題。比如,下...
閱讀 1343·2019-08-30 15:55
閱讀 1645·2019-08-26 10:21
閱讀 3438·2019-08-23 18:28
閱讀 3375·2019-08-23 15:38
閱讀 744·2019-08-23 15:24
閱讀 2135·2019-08-23 13:59
閱讀 775·2019-08-23 11:31
閱讀 2871·2019-08-23 10:53