线程间同步PV操作
来源:互联网 发布:java登录界面 编辑:程序博客网 时间:2024/05/16 09:10
1.同步(synchronization)指的是多个任务(线程)按照约定的顺序相互配合完成一件事情
2.由信号量来决定线程是继续运行还是阻塞等待
3.信号量代表一类资源,其值表示系统中该资源的数量
4.信号量是一个爱保护的变量,只能通过三种操作来访问,初始化,P操作(消费者)V操作(生产者)
5.信号量的值为非负整数
所用函数
sem_init();
sem_wait();
sem_post();
pthread_create();
pthread_join();
--------------------------------------------------------------------------------------
common.h
--------------------------------------------------------------------------------------
#ifndef _COMMON_H
#define _COMMON_H
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#include<semaphore.h>
extern void pthread_function1(void *arg);
extern void pthread_function2(void *arg);
#endif
--------------------------------------------------------------------------------------
sem_syn.c
---------------------------------------------------------------------------------------
#include"common.h"
int gval;
int i;
sem_t sem1,sem2;
int main(int argc,char **argv)
{
pthread_t th1,th2;
sem_init(&sem1,0,1);
sem_init(&sem2,0,0);
pthread_create(&th1,NULL,(void *)pthread_function1,NULL);
pthread_create(&th2,NULL,(void *)pthread_function2,NULL);
pthread_join(th1,NULL);
pthread_join(th2,NULL);
return 0;
}
void pthread_function1(void *arg)
{
for(i=0;i<5;i++)
{
sem_wait(&sem1);
gval++;
sem_post(&sem2);
printf("pthread1 NO.%d=%d/n",i,gval);
}
}
void pthread_function2(void *arg)
{
for(i=0;i<5;i++)
{
sem_wait(&sem2);
gval=gval+2;
sem_post(&sem1);
printf("pthread2 NO.%d=%d/n",i,gval);
}
}
----------------------------------------------------------------------------------------
结果:
[root@localhost sem_syn]# ./s
pthread1 NO.0=1
pthread2 NO.0=3
pthread1 NO.1=4
pthread2 NO.2=6
pthread1 NO.3=7
pthread2 NO.4=9
pthread1 NO.5=10
----------------------------------------------------------------------------------------
线程1运行加1,然后线程2运行加2交替运行
- 线程间同步PV操作
- 线程同步之PV操作
- 线程间的pv操作
- 用PV操作实现多线程间同步互斥(PV)
- 用PV操作实现多线程间同步互斥(PV)
- 进程同步与PV操作
- 线程的信号量 PV操作
- PV 线程同步和多线程问题
- PV操作、信号量、同步与互斥
- 【软考】PV操作同步互斥
- 软考之PV操作(同步)
- 信号量实现线程之间的PV操作
- Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步
- Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步
- Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步
- 13.[个人]C++线程入门到进阶(13)----多线程同步内功心法--PV操作(上)
- 一个PV操作题引发的思考,如何看待进程间同步、互斥
- 进程间通信——消息传递(信号量同步PV操作)
- three20 network
- linux驱动 重点:module_init module_exit
- CentOS安装crontab及使用方法
- 中金工作感受(转自复旦bbs)
- 非主键建立唯一性索引
- 线程间同步PV操作
- Struts2入门学习笔记之一
- 自己写的自动完成js插件源码
- 关于标志量的使用
- 简单介绍join,outer-join,semi-join,anti-join的区别
- 急急怎么办 网站板块错乱 后台改了个底部代码
- 有关top命令中的%st,sar命令中的%steal
- 有史以来最伟大的15家科技创新企业
- 赋值函数