首页 > 代码库 > 用c++封装linux系统调用
用c++封装linux系统调用
#include <pthread.h>#include <cstdlib>#include <ctime>#include <iostream>using namespace std;class RWLock {private : pthread_mutex_t cnt_mutex; pthread_cond_t rw_cond; int rd_cnt, wr_cnt; RWLock(const RWLock&); RWLock& operator= (const RWLock&);public : RWLock(): rd_cnt(0),wr_cnt(0) { pthread_mutex_init(&cnt_mutex, NULL); pthread_cond_init(&rw_cond, NULL); } void get_shared_lock() { pthread_mutex_lock(&cnt_mutex); while (wr_cnt >0) { pthread_cond_wait(&rw_cond,&cnt_mutex); } rd_cnt++; pthread_mutex_unlock(&cnt_mutex); } void release_shared_lock() { pthread_mutex_lock(&cnt_mutex); rd_cnt--; if (0 == rd_cnt) { pthread_cond_signal(&rw_cond); } pthread_mutex_unlock(&cnt_mutex); } void get_exclusive_lock() { pthread_mutex_lock(&cnt_mutex); while (rd_cnt+wr_cnt>0) { pthread_cond_wait(&rw_cond,&cnt_mutex); } wr_cnt++; pthread_mutex_unlock(&cnt_mutex); } void release_exclusive_lock() { pthread_mutex_lock(&cnt_mutex); wr_cnt--; pthread_cond_broadcast(&rw_cond); pthread_mutex_unlock(&cnt_mutex); } ~RWLock() { pthread_mutex_destroy(&cnt_mutex); pthread_cond_destroy(&rw_cond); }};class Test{private : RWLock lock; static void* shared_task_handler(void* arg) { Test* testptr = static_cast<Test*>(arg); testptr->lock.get_shared_lock();//得到共享锁 //do the shared task here testptr->lock.release_shared_lock(); } static void * exclusive_task_handler(void * arg) { Test* testptr = static_cast<Test*>(arg); testptr->lock.get_exclusive_lock(); //do the exclusive task here testptr->lock.release_exclusive_lock(); }public : typedef void* (*ThreadFunc) (void*); void start() { srand(time(NULL)); const int THREADS_NO=rand()%100; pthread_t* threads = new pthread_t[THREADS_NO]; for(int i=0; i<THREADS_NO; i++) { ThreadFunc tmpfunc = rand()%2? shared_task_handler : exclusive_task_handler; if (pthread_create(threads+i,NULL,tmpfunc,this)) { cerr << "pthread_create fails" << endl; exit(1); } } for(int i=0; i<THREADS_NO; i++) { pthread_join(threads[i],NULL); } delete[] threads; }};int main(){ Test tmptest; tmptest.start();}static_cast < type-id > ( expression )int i;float f = 166.71;i = static_cast<int>(f);此时结果,i的值为166。cstdlib是C++里面的一个常用函数库, 等价于C中的<stdlib.h>。http://blog.chinaunix.net/uid-52437-id-2108727.html
用c++封装linux系统调用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。