📄 mysync.cpp
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -