⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rwlock.cpp

📁 SMS gateway. SMS protocol for CHINA mobile, unicom, lingtong. Using mysql to exchange message.
💻 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 + -