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

📄 testrwsem.cpp

📁 Software Testing Automation Framework (STAF)的开发代码
💻 CPP
字号:
/*****************************************************************************//* Software Testing Automation Framework (STAF)                              *//* (C) Copyright IBM Corp. 2001                                              *//*                                                                           *//* This software is licensed under the Common Public License (CPL) V1.0.     *//*****************************************************************************/#include "STAF.h"#include "STAFRWSem.h"#include "STAFEventSem.h"#include "STAFThreadManager.h"#include "STAF_iostream.h"const unsigned int NUM_READ_THREADS = 3;const unsigned int NUM_WRITE_LOOPS = 3;unsigned int readThread(void *);unsigned int writeThread(void *);STAFRWSem gRWSem;STAFEventSem gEndSem;int main(void){    STAFThreadManager tm(2);    for (int i = 0; i < NUM_READ_THREADS; ++i)    {        tm.dispatch(readThread, 0);    }    tm.dispatch(writeThread, 0);    gEndSem.wait();    return 0;}unsigned int readThread(void *){    for (;;)    {        cout << "Thread " << STAFThreadManager::getCurrentThreadID()             << " waiting for read lock" << endl;        STAFRWSemRLock theLock(gRWSem);//        gRWSem.readLock();        cout << "Thread " << STAFThreadManager::getCurrentThreadID()             << " acquired read lock and sleeping for 2 seconds" << endl;        STAFThreadManager::sleepCurrentThread(2000);        cout << "Thread " << STAFThreadManager::getCurrentThreadID()             << " releasing read lock" << endl;//        gRWSem.readUnlock();    }    return 0;}unsigned int writeThread(void *){    for (int i = 0; i < NUM_WRITE_LOOPS; ++i)    {        cout << "Thread " << STAFThreadManager::getCurrentThreadID()             << " waiting for write lock" << endl;        STAFRWSemWLock lock(gRWSem);//        gRWSem.writeLock();        cout << "Thread " << STAFThreadManager::getCurrentThreadID()             << " acquired write lock and sleeping for 5 seconds" << endl;        STAFThreadManager::sleepCurrentThread(5000);        cout << "Thread " << STAFThreadManager::getCurrentThreadID()             << " releasing write lock" << endl;//        gRWSem.writeUnlock();    }    gEndSem.post();    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -