国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

linux下多線程踩過的坑(不定更新)

2024-06-28 13:21:14
字體:
來源:轉載
供稿:網友
linux下多線程踩過的坑(不定更新)

1,多線程下整個進程的退出

<<APUE>>關于進程環境一章中指出了進程退出的8個條件:

...

(4)最后一個線程從啟動例程中返回

(5)最后一個線程調用pthread_exit()返回

...

這些條件一個前提是,主線程在等待子線程返回,若沒有等待,則是主線程退出,整個進程直接退出了。其實主線程在等待子線程時,是阻塞到join()上了,最后也是主線程最后退出,整個進程也結束了。

主線程

1 ...2 {3 pthread_create(...)4 //打印 “In the main”5 sleep(1);6 }

子線程

1 ...2 {3 //打印 “I am First”4 sleep(2);5 //打印 “I am Second”6 }

這樣子線程中的第二句話,永遠也打印不出來;當去掉主線程中的sleep(1)后,子線程中的第一句話有時能打印出來,有時不能打印出來,第二句話永遠也打印不出來,其實這里的sleep(1)起到了一個類似join()的作用。

多線程中切記一定要在主線程中join()子線程,也不要對sleep(...)產生任何信任,說不定子線程運行一半就退出了。

(2)多線程中的打印函數切記一定是沒有輸入緩沖的。

當我用cout,fPRintf等函數往控制臺上輸出時,一開始還是正確的,當我不斷運行同一個程序時,就會產生問題,有些語句輸出了兩次,如I am second連續打印了兩次,有時候兩句話輸出到了同一行(就是endl沒有起作用),我猜想因為這些函數是帶有輸入緩沖的。

改用了

1 #include<unistd>2 size_t write(int filedes, const void* buf, size_t bufsize);

函數后,就沒有上面的問題了。

多線程中這種寫日志的信息,我想應該用系統不帶緩沖的I/O,而別去使用標準庫I/O。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 方山县| 峡江县| 彰化县| 株洲市| 怀安县| 阿克| 六盘水市| 清苑县| 贡嘎县| 庆城县| 德令哈市| 兴宁市| 临武县| 永兴县| 泰州市| 清河县| 林周县| 无为县| 大埔区| 桓台县| 小金县| 嘉鱼县| 文安县| 资溪县| 龙里县| 施甸县| 青田县| 开平市| 乌什县| 鹤庆县| 清丰县| 吉安市| 邵武市| 新绛县| 娱乐| 隆尧县| 澎湖县| 孟连| 吉隆县| 全州县| 紫金县|