多執行緒安全

2021-06-17 20:27:34 字數 1718 閱讀 1286

專案中需要在多執行緒環境下,輸出日誌到標準輸出,以下是實現過程。

首先,我們需要乙個鎖類,能夠自動初始化,並且降低耦合。

/*

* locker.h

* * created on: apr 14, 2012

* author: joan

*/#ifndef locker_h_

#define locker_h_

#include "../option.h"

class locker

inline ~locker()

inline void lock()

inline void unlock()

private:

pthread_mutex_t mutex;

};#endif /* locker_h_ */

其次,宣告日誌類,重點是將建構函式私有化,將函式成員和資料成員宣告為靜態,新增例項指標和全域性訪問點。

/*

* log.h

* * created on: apr 8, 2012

* author: joan

*/#ifndef log_h_

#define log_h_

#include "../option.h"

#include "locker.h"

/* * this class is responsible for the running log of tinyjse

* there should only exist one instance of tinylog,

* so we use singleton to implement tinylog

*/class tinylog

;#endif /* log_h_ */

然後是日誌類的實現,注意全域性訪問點中使用double check提高效能。

/*

* log.cpp

* * created on: apr 8, 2012

* author: joan

*/#include "../option.h"

#include "log.h"

tinylog * tinylog::log = null;

locker tinylog::llock;

tinylog::tinylog()

tinylog::~tinylog()

/* * get the pointer to the only instance of tinylog

* use double check to assure only one instance is created

*/tinylog *tinylog::getinstance()

llock.unlock();

} return log;}/*

* unified handling of the log of tinyjse

*/void tinylog::writelog(const char *format,...)

使用該單例:

#define print(format,args...)	tinylog::getinstance()->writelog(format,##args)

多執行緒 執行緒安全

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

多執行緒 執行緒安全

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

多執行緒 執行緒安全

執行緒安全 多個執行流對臨界資源的爭搶訪問,但是不會出現資料二義性 執行緒安全的實現 同步 通過條件判斷保證對臨界資源訪問的合理性 互斥 通過同一時間對臨界資源訪問的唯一性實現臨界資源訪問的安全性 互斥鎖實現的原理 互斥鎖本身是乙個只有0 1的計數器,描述了乙個臨界資源當前的訪問狀態,所有執行流在訪...