1 Star 0 Fork 0

快乐的pro/TinyHttpWebServerBaseLinux

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
locker.h 2.22 KB
一键复制 编辑 原始数据 按行查看 历史
快乐的pro 提交于 2021-09-01 23:16 . 创建互斥锁类 与 线程池类
#ifndef LOCKER_H
#define LOCKER_H
#include <exception>
#include <pthread.h>
#include <semaphore.h>
// 线程同步机制封装类
// 互斥锁类
class locker {
public:
//构造函数
locker() {
if(pthread_mutex_init(&m_mutex, NULL) != 0) {
throw std::exception();
}
}
//析构函数
~locker() {
pthread_mutex_destroy(&m_mutex);
}
//上锁
bool lock() {
return pthread_mutex_lock(&m_mutex) == 0;
}
//解锁
bool unlock() {
return pthread_mutex_unlock(&m_mutex) == 0;
}
//获取互斥量
pthread_mutex_t *get()
{
return &m_mutex;
}
private:
pthread_mutex_t m_mutex;
};
// 条件变量类:判断队列中是否有数据,条件变量配合互斥锁来使用
class cond {
public:
//构造函数
cond(){
if (pthread_cond_init(&m_cond, NULL) != 0) {
throw std::exception();
}
}
//析构函数
~cond() {
pthread_cond_destroy(&m_cond);
}
//wait
bool wait(pthread_mutex_t *m_mutex) {
int ret = 0;
ret = pthread_cond_wait(&m_cond, m_mutex);
return ret == 0;
}
//带超时时间的wait
bool timewait(pthread_mutex_t *m_mutex, struct timespec t) {
int ret = 0;
ret = pthread_cond_timedwait(&m_cond, m_mutex, &t);
return ret == 0;
}
//让一个或者多个线程唤醒
bool signal() {
return pthread_cond_signal(&m_cond) == 0;
}
//将所有的线程都唤醒
bool broadcast() {
return pthread_cond_broadcast(&m_cond) == 0;
}
private:
pthread_cond_t m_cond;
};
// 信号量类
class sem {
public:
//构造函数
sem() {
if( sem_init( &m_sem, 0, 0 ) != 0 ) {
throw std::exception();
}
}
//带参数的构造函数
sem(int num) {
if( sem_init( &m_sem, 0, num ) != 0 ) {
throw std::exception();
}
}
//析构函数
~sem() {
sem_destroy( &m_sem );
}
// 等待信号量
bool wait() {
return sem_wait( &m_sem ) == 0;
}
// 增加信号量
bool post() {
return sem_post( &m_sem ) == 0;
}
private:
sem_t m_sem;
};
#endif
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/flameH001/tiny-http-web-server-base-linux.git
git@gitee.com:flameH001/tiny-http-web-server-base-linux.git
flameH001
tiny-http-web-server-base-linux
TinyHttpWebServerBaseLinux
master

搜索帮助