程序鎖實現 有名訊號量

2021-07-01 19:49:07 字數 1780 閱讀 7191

說明: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 在建立的這一刻根本就沒...