📄 rwlock.cpp
字号:
//#include "stdafx.h"#include "RWLock.h"#include <iostream.h>// read values from fileint RWLock::LockIn() { // open in file lockFile.open( RWLockFileName, ios::in ); if (!lockFile) return ResetLock(); // read from file lockFile >> Readers; lockFile >> Writers; // close file lockFile.close(); return EXIT_SUCCESS;}// write values to fileint RWLock::LockOut() { enum open_mode { trunc = 020 }; // open out file lockFile.open( RWLockFileName, ios::out|ios::trunc); if (!lockFile) { //cerr << "RWLock::LockOut: Cannot open lock file." << endl; return EXIT_FAILURE; } // write to file lockFile << Readers << "\n"; lockFile << Writers << "\n"; // close file lockFile.close(); return EXIT_SUCCESS;}// reset values and write to lock fileint RWLock::ResetLock() { Readers = 0; Writers = 0; return LockOut();}// Initialization: create the file with extension RWLockint RWLock::InitLock( char *fileName, unsigned int ts = 1 ) { struct stat fp; // sleep time in seconds RWsleep = ts; // create lock file name int len = strlen( fileName ); if (!len) { //cerr << "RWLock::InitLock: Non-existing file name." << endl; return EXIT_FAILURE; } if (stat( fileName, &fp ) != 0) { //cerr << "RWLock::InitLock: Cannot lock a non-existing file." << endl; return EXIT_FAILURE; } RWLockFileName = new char[len + 8]; strcpy( RWLockFileName, fileName ); strcat( RWLockFileName, ".RWLock" ); // check whether lock file exists, if not open it if (stat( RWLockFileName, &fp ) != 0) return ResetLock(); return EXIT_SUCCESS;}// Obtain a reader lock.int RWLock::ReadLock() { LockIn(); while (Writers) { sleep( RWsleep ); LockIn(); } Readers++; return LockOut();}// Unlock reader lockint RWLock::ReadUnLock() { LockIn(); if (Readers == 0) return EXIT_FAILURE; Readers--; return LockOut();}// Obtain a writer lockint RWLock::WriteLock() { LockIn(); while (Writers || Readers) { sleep( RWsleep ); LockIn(); } Writers++; return LockOut();}// Release a writer lockint RWLock::WriteUnLock() { LockIn(); if (Writers == 0) return EXIT_FAILURE; Writers = 0; return LockOut();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -