中介紹了pread和pwrite函式,這些函式在多執行緒環境下是非常有幫助的,因為程序中的所有執行緒共享相同的檔案描述符。
考慮兩個執行緒,在同一時間對同一檔案描述符進行讀寫操作。
執行緒a:lseek(fd,
300, seek_set);
read(fd, buf1,
100);
執行緒b:
lseek(fd,
700, seek_set);
read(fd, buf2,
100);
為了解決這個問題,可是使用pread,是偏移量的設定和資料的讀取成為乙個原子操作。
執行緒a:pread(fd, buf1,
100, 300
);執行緒b:
pread(fd, buf2,
100, 700);
使用pread可以確保執行緒a讀取偏移量為300的記錄,而執行緒b讀取偏移量為700的記錄。可以使用pwrite來解決併發執行緒對同一檔案進行寫操作的問題。
本篇博文內容摘自《unix環境高階程式設計》(第二版),僅作個人學習記錄所用。關於本書可參考:。
執行緒控制之執行緒和訊號
每個執行緒都有自己的訊號遮蔽字,但是訊號的處理是程序中所有執行緒共享的。這意味著儘管單個執行緒可以阻止某些訊號,但當執行緒修改了與某個訊號相關的處理行為以後,所有的執行緒都必須共享這個處理行為的改變。程序中的訊號是遞送到單個執行緒的。如果訊號與硬體故障或計時器超時相關,該訊號就被傳送到引起該事件的執...
Linux之執行緒控制
執行緒控制 由於執行緒是後來才引用進來的,因此,在編譯鏈結時需要加 lpthread來引入外部庫 posix 建立執行緒 include 函式原型 int pthread create pthread t thread,const pthread attr t attr,void start rou...
執行緒控制 join執行緒
在我們做專案的時候時常會有這樣的一種需求 我們需要執行兩個方法,乙個方法要等另乙個方法執行完才能執行,這樣的狀況放到多執行緒中要怎麼實現呢?今天就來看看多執行緒中的join方法。我們的均方法通常是把乙個大問題分成許多小問題,每個小問題分配乙個執行緒,當所有的小問題都得到處理後,在呼叫主線程來進一步操...