專案中需要在多執行緒環境下,輸出日誌到標準輸出,以下是實現過程。
首先,我們需要乙個鎖類,能夠自動初始化,並且降低耦合。
/*
* 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的計數器,描述了乙個臨界資源當前的訪問狀態,所有執行流在訪...