mysync.cpp
来自「是socket的功能包」· C++ 代码 · 共 91 行
CPP
91 行
#include<iostream>#include<pthread.h>#include<unistd.h>#include<stdio.h>#include<sys/time.h>#include<errno.h>#include"../include/mysync.h"MyMutex::MyMutex(){ error = pthread_mutex_init(&a_mutex, NULL);}MyMutex::~MyMutex(){ error = pthread_mutex_destroy(&a_mutex);}MyCondition::MyCondition(){ error = pthread_cond_init(&got_request, NULL); error += pthread_mutex_init(&a_mutex, NULL);}MyCondition::~MyCondition(){ error = pthread_mutex_destroy(&a_mutex); int rc = pthread_cond_destroy(&got_request); while (rc == EBUSY) { sleep(1); } error = error + rc;}int MyCondition::Wait(int second){ struct timeval now; struct timespec timeout; int done; int rc = pthread_mutex_lock(&a_mutex); if (rc) { perror("pthread_mutex_lcok"); pthread_exit(NULL); } if (second) { gettimeofday(&now, NULL); timeout.tv_sec = now.tv_sec + second; timeout.tv_nsec = now.tv_usec * 1000; error = pthread_cond_timedwait(&got_request, &a_mutex, &timeout); } else { error = pthread_cond_wait(&got_request, &a_mutex); } pthread_mutex_unlock(&a_mutex); switch (error) { case 0: return 0; case ETIMEDOUT: return 1; default: return 2; }}int MyCondition::Wake(){ error = pthread_cond_signal(&got_request); return error;}int MyCondition::WakeAll(){ error = pthread_cond_broadcast(&got_request); return error;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?