event(condition variable signal)
来源:互联网 发布:混合高斯算法 编辑:程序博客网 时间:2024/05/21 01:45
Condition variable 相关的function
int pthread_cond_init( //建立condition variable
pthread_cond_t *cond, //要建立的condition variable
pthread_condattr_t *attr); //建立的设定 可以给NULL最好
int pthread_cond_wait( //等待某个condition variable
pthread_cond_t *cond, //要等待的condition variable
pthread_mutex_t *mutex); //伴随wait所使用的mutex
int pthread_cond_signal( //通知一个等待的thread
pthread_cond_t *cond);
int pthread_cond_broadcast( //通知所有等待的threads
pthread_cond_t *cond);
int pthread_cond_destroy(pthread_cond_t *cond); //释放
成功 返回0
失败 Error_num > 0
------------------------------------------------------------------------------------------------------------------
用法
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
pthread_cont_t g_cond;
pthread_mutex_t g_mutex;
void *aa(void *arg){
..
//做完了 signal通知
pthread_cond_signal(&g_cond, &g_mutex);
}
main(){
pthread_t tid;
//init
pthread_cond_init(&g_cond, NULL);
pthread_cond_init(&g_mutex, NULL);
//建立thread aa
pthread_create(&tid, NULL, aa, NULL);
...
//等待aa结束
pthread_cond_wait(&g_cond, &g_mutex);
//aa做完 可以继续往下做
...
//释放资源
pthread_cond_destroy(&g_mutex);
pthread_mutex_destroy(&g_mutex);
}
---------------------------------------------------------------------------------------------------------------------------------------------------
Signal
int sigemptyset(sigset_t *set) //清空
int sigaddset(//加入一个signal 到 set
sigset_t *set, //signal set
int signum); //要加入的signal number
int sigdelset( //从sett中删除一个signal
sigset_t *set, //signal set
int signum); //要删除的signal number
int sigprocmask( //设定等待signals
int how, //等待方式 SIG_BLOCK SIG_UNBLOCK, SIG_SETMASK)
const sigset_t *set, //打算等待的哪些signals(signal set)
sigset_t *oldest0); //返回原本的set 可以是NULL
int sigwait(*set, int *sig); //等待set里面所有的signals
int kill(pid, signum); //通知某些process ->signum发生
---------------------------------------------------------------------------------------------------------------------------
Signal 当成event使用
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
pthread_cont_t g_cond;
pthread_mutex_t g_mutex;
void *aa(void *arg){
pid_t ppid=0;
..
//取得parent pid
ppid = getpid();
//做完 signal通知
kill(ppid, SIGUSR1);
}
main(){
pthread_t tid; sigset_t set;
int sig=0;
//init set(只等待SIGUSR1)
sigemptyset(&set);
sigaddset(&set, SIGUSR1);
sigprocmask(SIG_MASK, &set, NULL);
//建立thread aa
pthread_create(&tid, NULL, aa, NULL);
...
//等待aa结束的signal
sigwait(&set, &sig);
//aa做完 可以继续往下做
...
}
- event(condition variable signal)
- signal variable
- condition variable in os161
- Condition variable 2
- Discussion about Condition Variable
- Condition Variable Spurious Wakes
- 条件变量 condition variable
- Condition Variable notify_one notify_all
- Concurrent list with condition variable
- 条件变量(Condition Variable)详解
- 条件变量(Condition Variable)详解
- mutex 和 condition variable[转载]
- 线程--条件变量Condition Variable
- 条件变量(Condition Variable)详解
- 关于condition variable的理解
- 条件变量(Condition Variable)详解
- 条件变量(condition variable)详解
- 条件变量(Condition Variable)详解
- Appium基础篇11-元素操作之点击和输入
- 面试OR笔试35——xor
- Android中的颜色设置和常见RGB颜色表
- CSS3box-shadow与text-shadow
- java web 项目部署到 阿里云ecs(win)
- event(condition variable signal)
- 第零周9.10
- 定时器
- 九度 题目1444:More is better
- Android Studio自定义配置注释模板
- 文件字节流--拷贝文件夹
- 景点【查找关键词】
- Swift3.0 Cocoapods 安装方法
- nginx