說明:linux平台
**:
/** @file processlock.h
* @brief 程序鎖實現
* @date 2015-4-15
* @note 用有名訊號量實現
*/#pragma once
#include using std::string;
class cprocesslock
;
#include #include #include #include #include #include #include #include #include "processlock.h"
using std::string;
#define open_flag o_rdwr|o_creat
#define open_mode 00777
#define init_v 1
cprocesslock::cprocesslock()
cprocesslock::~cprocesslock()
bool cprocesslock::init(const char *pname)
memcpy(sem_name, pname, nlen);
sem_ = sem_open(sem_name, open_flag, open_mode, init_v);
if(sem_ == sem_failed)
else
return true;
}bool cprocesslock::init(const string &name)
memcpy(sem_name, name.c_str(), nlen);
sem_ = sem_open(name.c_str(), open_flag, open_mode, init_v);
if(sem_ == sem_failed)
else
return true;
}bool cprocesslock::is_good()
void cprocesslock::uninit()
init_ = false;
sem_ = null;
memset(sem_name, 0, 64);
}void cprocesslock::lock()
void cprocesslock::unlock()
//測試用例
/**程序鎖測試用例
編譯:加鎖:g++ -wall -g -duse_lock -lrt -o test_processlock test_processlock.cpp processlock.cpp
不加鎖:g++ -wall -g -lrt -o test_processlock test_processlock.cpp processlock.cpp
*/#include #include #include #include #include "processlock.h"
using namespace std;
cprocesslock mylock;
#define max_len 1000
void print_log(const char *buf)
{#ifdef use_lock
mylock.lock();
#endif
for(int i=0; i
執行結果:不加鎖時,子程序和父程序的字元交替出現,加鎖後能夠互斥輸出。
參考:
使用FIFO實現POSIX有名訊號量
使用fifo實現posix訊號量算是乙個 unix網路程式設計 卷二 中第十章的乙個高階內容,其實數中僅僅是大致的實現了posix訊號量中極為有限的一部分功能。書中重新寫了sem open函式 sem unlink函式 sem close函式 sem wait函式和sem post函式,為什麼說使用...
訊號量實現讀寫鎖
一般的讀寫鎖 一般的讀寫鎖都是一開始對鎖分配max resource個資源,其中寫操作的時候會一次性占用 max resource個資源,而讀操作的時候就只會占用乙個資源。這樣子會出現乙個問題就是 如果在當前資源的數目不為max resource的時候,那麼總是不能進行寫操作,只能是進行 讀操作,如...
訊號量 事件 鎖 守護程序
什麼是程序?程序是計算機中最小的資源分配單位 程序與程序之間資料隔離,執行過程非同步 為什麼會出現程序的概念?合理利用cpu 提高使用者體驗 多個程序是可以同時利用多個cpu的,可以實現並行的效果 在主程序中控制子程序的方法?子程序物件 process target,args 在建立的這一刻根本就沒...