設計多執行緒安全庫

2021-06-08 19:19:14 字數 749 閱讀 9971

1. 為什麼要多執行緒?

多執行緒可以提高系統的效能。更方便實現某些程式模型。

2. posix中的一些執行緒安全函式如下

asctime_r, ctime_r, getgrgid_r,getgrnam_r, getpwnam_r,

getpwuid_r, gmtime_r, localtime_r, rand_r, readdir_r, strtok_r

3. 執行緒安全和可重入例程的特點

執行緒安全例程是指這個例程即使被多個執行緒同時呼叫也不會產生錯誤

的結果。

通常,可以通過一下三種方法來保證執行緒安全:

3.1 設計成可重入例程

只使用引數和堆疊的例程。    

void test(int *buf)

3.2 使用執行緒區域性的資料

使用thread specific data或者thread local storage技術的函式

3.3 利用鎖技術

spinlock, mutex_lock , ...

4. 非執行緒安全函式的例子

4.1  libc 中的ctime

返回了全域性的靜態分配的_tmbuf

struct tm _tmbuf;

/* return the `struct tm' representation of *t in local time.  */

struct tm *

localtime (t)

const time_t *t;

設計安全的多執行緒應用程式 執行緒安全

以前常聽高手告誡mfc物件不要跨執行緒使用,因為mfc不是執行緒安全的。比如cwnd物件不要跨執行緒使用,可以用視窗控制代碼 hwnd 代替。csocket casyncsocket物件不要跨執行緒使用,用socket控制代碼代替.那麼到底什麼是執行緒安全呢?什麼時候需要考慮?如果程式涉及到多 執行...

多執行緒 執行緒安全

原因 當多個執行緒同時共享,同乙個全域性變數或靜態變數。做寫的操作時,可能發生資料衝突問題,也就是執行緒安全問題。但是做讀操作是不會發生資料衝突問題。解決方案 方式一 內建鎖synchronized synchronized保證執行緒原子性,當執行緒進入方法的時候,自動獲取鎖,一旦鎖被其它執行緒獲取...

多執行緒 執行緒安全

public class unsafethread t.start while thread.activecount 1 system.out.println sum 1 從主記憶體中講sum變數複製到執行緒的工作記憶體 2 在工作記憶體中修改變數 1操作 3 將sum變數從執行緒的工作記憶體寫回到...