色偷偷91综合久久噜噜-色偷偷成人-色偷偷尼玛图亚洲综合-色偷偷人人澡久久天天-国内精品视频一区-国内精品视频一区二区三区

Hello! 歡迎來到小浪云!


UNIX 下奇怪的事情


最近在使用自編工具處理 unix 系統(tǒng)任務(wù)時(shí),遇到了兩個(gè)意料之外的情況,并非程序錯(cuò)誤,而是行為超出了預(yù)期。

UNIX 下奇怪的事情

線程安全 printf 函數(shù)

我編寫了一個(gè) C 程序,用于讀取磁盤上的圖像,進(jìn)行處理,并將結(jié)果輸出到標(biāo)準(zhǔn)輸出 (STDOUT)。簡(jiǎn)化后的代碼如下:

for (imagefilename in images) {     results = process(imagefilename);     printf(results); }

圖像處理相互獨(dú)立,因此我嘗試使用 fork() 將處理任務(wù)分配到多個(gè) CPU 內(nèi)核以提高速度:

for (child in children) {     pipe = create_pipe();     worker(pipe); } // 父進(jìn)程 for (imagefilename in images) {     write(pipe[i_image % N_children], imagefilename); } worker() {     while (1) {         imagefilename = read(pipe);         results = process(imagefilename);         printf(results);     } }

我創(chuàng)建管道進(jìn)行進(jìn)程間通信 (IPC),將文件名發(fā)送給子進(jìn)程 worker。每個(gè) worker 直接寫入共享的 STDOUT,導(dǎo)致輸出混亂。 flockfile() 函數(shù)無法解決問題,因?yàn)樗軐憰r(shí)復(fù)制機(jī)制的影響,每個(gè)子進(jìn)程都擁有鎖的副本。

我最終選擇使用線程而非 fork() 來解決此問題,避免了復(fù)雜的管道操作。 代碼如下:

for (children) {     pthread_create(worker, child_index); } for (children) {     pthread_join(child); } worker(child_index) {     for (i_image = child_index; i_image < ... ) {         // ...     } }

這種方法更簡(jiǎn)潔有效??磥恚承┣闆r下線程比進(jìn)程更適用。

將部分讀取的文件傳遞給子進(jìn)程

對(duì)于某些 vnlog 工具,我需要實(shí)現(xiàn)以下操作序列:

  1. 進(jìn)程打開一個(gè)未設(shè)置 O_CLOEXEC 標(biāo)志的文件。
  2. 進(jìn)程讀取文件的一部分(例如,vnlog 中的圖例結(jié)尾)。
  3. 進(jìn)程調(diào)用 exec() 執(zhí)行另一個(gè)程序處理已打開文件的剩余部分。

第二個(gè)程序可能需要文件名而非文件描述符作為命令行參數(shù),因?yàn)樗赡茏孕姓{(diào)用 open()。傳遞文件名會(huì)導(dǎo)致重新打開文件并從頭開始讀取,這無法滿足需求。

我嘗試使用 /dev/fd/N 傳遞文件描述符,但它在 Linux 系統(tǒng)上表現(xiàn)得像符號(hào)鏈接,與傳遞文件名效果相同。

解決方法是使用管道而非文件。/dev/fd/N 在管道上能正確傳遞文件描述符。 這可以通過將 open(“filename”) 替換為 popen(“cat filename”) 來實(shí)現(xiàn),但這并非理想解決方案。 這在 BSD 系統(tǒng)上的表現(xiàn)可能有所不同。

相關(guān)閱讀

主站蜘蛛池模板: 天天干影视 | 夜夜躁日日躁狠狠久久 | 日本人妖在线观看 | 看看黄色毛片 | 亚洲不卡一区二区三区在线 | 久久久这里只有精品免费 | 日本韩国视频在线观看 | 欧美大陆日韩一区二区三区 | 欧美e片成 人 在线播放乱妇 | 日韩免费播放 | 天天天天天天操 | 99久久综合久中文字幕 | 精品国产乱码一区二区三区 | 国产成人综合亚洲欧洲色就色 | 色综合久久综精品 | 巨胸喷奶水视频www网快速 | 一区二区三区日韩精品 | 国产一区日韩二区欧美三区 | 成人夜色视频在线观看网站 | 日韩a一级欧美一级在线播放 | 久久综合五月天 | 色婷婷综合久久久中文字幕 | 国产亚洲欧美久久久久 | 国产伊人精品 | 色综合天天综合给合国产 | 久久久久久福利 | 精品国产福利第一区二区三区 | 四虎影视在线麻豆国产 | 99久久国内精品成人免费 | 国产精品va一级二级三级 | 日本精品1在线区 | 日本三级黄色片 | 久久精品欧美一区二区 | 免费看黄的视频网站 | 五月亚洲 | 中国大陆高清aⅴ毛片 | 欧美日韩视频精品一区二区 | 国产一区二区精品 | 制服丝袜中文 | 青青久精品观看视频最新 | 奇米在线8888在线精品 |