互斥锁Demo
#include <stdio.h>
#include <pthread.h>
pthread_t work1Id;
pthread_t work2Id;
int work1Ret = ;
int work2Ret = ;
pthread_cond_t cond_ready = PTHREAD_COND_INITIALIZER;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int number = ;
void* Work1(void* args)
{
int i = ;
printf("I am work%d\n", *((int*)args));
for(i = ; i < ; i++)
{
pthread_mutex_lock(&mutex);
number++;
if(number%==)
{
printf("I am work%d, Finish\n", *((int*)args));
pthread_cond_signal(&cond_ready);
sleep();
}
pthread_mutex_unlock(&mutex);
printf("I am work%d, number = %d and unlock \n", *((int*)args), number);
sleep();
}
return &work1Ret;
}
void* Work2(void* args)
{
printf("I am work%d\n", *((int*)args));
while(number <)
{
pthread_mutex_lock(&mutex);
if(number <= )
{
pthread_cond_wait(&cond_ready, &mutex);
printf("I am work%d, number = %d receive SIG\n", *((int*)args), number);
}
pthread_mutex_unlock(&mutex);
}
return &work2Ret;
}
int main()
{
int args1 = ;
int args2 = ;
void* work1Ret = NULL;
void* work2Ret = NULL;
pthread_create(&work1Id, NULL, Work1, &args1);
pthread_create(&work2Id, NULL, Work2, &args2);
pthread_join(work1Id, &work1Ret);
if(work1Ret != NULL)
{
printf("work1Ret = %d\n", *((int*)work1Ret));
}
pthread_join(work2Id, &work2Ret);
if(work2Ret != NULL)
{
printf("work2Ret = %d\n", *((int*)work2Ret));
}
return ;
}
互斥锁Demo的更多相关文章
- Windows互斥锁demo和分析
一:windows创建锁接口 创建互斥锁的方法是调用函数CreateMutex HANDLE CreateMutex( LPSECURITY_ATTRIBUTESlpMutexAttributes, ...
- RT-Thread互斥锁
互斥锁和信号量很相似, RT-Thread 中的互斥锁也有静态和动态之分,和互斥锁有关的操作如下:初始化—rt_mutex_init()(对应静态互斥锁):建立—rt_mutex_create()(对 ...
- zookeeper实现互斥锁
简单的说,zookeeper就是为了解决集群环境中数据一致性的问题. 举个很简单栗子: 有一个变量A,分别存在于两台服务器中,某个程序需要用到变量A,就随机地访问其中一台服务器并取得变量A的值,对吧? ...
- Python中线程与互斥锁
了解之前我们先了解一下什么是多任务? 概念: 几个不同的事件在同时运行就是多任务, 这样的话, 我们有牵扯到了真的多任务, 假的多任务; 并行: 真的多任务, 通过电脑的核数来确定 并发: 假的多任务 ...
- 单机Redis实现分布式互斥锁
代码地址如下:http://www.demodashi.com/demo/12520.html 0.准备工作 0-1 运行环境 jdk1.8 gradle 一个能支持以上两者的代码编辑器,作者使用的是 ...
- 10.Go-goroutine,waitgroup,互斥锁和channel
10.1.goroutine goroutine的使用 //Learn_Go/main.go package main import ( "fmt" "time" ...
- 子进程回收资源两种方式,僵尸进程与孤儿进程,守护进程,进程间数据隔离,进程互斥锁,队列,IPC机制,线程,守护线程,线程池,回调函数add_done_callback,TCP服务端实现并发
子进程回收资源两种方式 - 1) join让主进程等待子进程结束,并回收子进程资源,主进程再结束并回收资源. - 2) 主进程 “正常结束” ,子进程与主进程一并被回收资源. from multipr ...
- Go 互斥锁(sync.Mutex)和 读写锁(sync.RWMutex)
什么时候需要用到锁? 当程序中就一个线程的时候,是不需要加锁的,但是通常实际的代码不会只是单线程,所以这个时候就需要用到锁了,那么关于锁的使用场景主要涉及到哪些呢? 多个线程在读相同的数据时 多个线程 ...
- 10.Go-goroutine,waitgroup,互斥锁,channel和select
10.1.goroutine goroutine的使用 //Learn_Go/main.go package main import ( "fmt" "time" ...
随机推荐
- hdu 5279 YJC plays Minecraft——生成函数
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5279 令 n 个点的树的 EGF 是 g(x) ,则 \( g(x) = \sum\limits_{i=0 ...
- 膜神犇 DPH
神犇 DPH 让我写博客.但是,似乎我已经开始写了?!! I am young and naïve!!! Let us orz DPH! 上节课讲DFS,这个是我最擅长的.“暴力出奇迹”!
- javscript 实现iframe加载内容页出现LOADING效果
<div id="load" align="center"> <img src="http://sc.cnwebshow.com/u ...
- spring restTemplate使用方法
https://github.com/lenve/SimpleSpringCloud/tree/master/RestTemplate在Spring Cloud中服务的发现与消费一文中,当我们从服务消 ...
- 怎么知道dll文件是哪个net版本
有时候经常需要查看.dll所使用的.net版本, 因为根本不知道它是使用了1.1还是2.0, 或者是3.0, 这个时候如果需要打开vs.net那又太麻烦, 所以经过长久的摸索, 我找到了一个比较简便的 ...
- Java异常处理教程
异常是在没有定义正常执行路径时在Java程序的执行期间可能出现的条件.Java通过将执行操作的代码与处理错误的代码分离来处理错误. 当发生异常时,Java会创建一个包含有关异常的所有信息的对象,并将其 ...
- leetcode python翻转字符串里的单词
# Leetcode 151 翻转字符串里的单词### 题目描述给定一个字符串,逐个翻转字符串中的每个单词. **示例1:** 输入: "the sky is blue" 输出: ...
- jmeter 后台运行 setsid bin/jmeter -n -t .jmx文件 -l .jtl文件
备注: 另外,在Linux下我们有时候希望线程可以在后台运行,这样我们关闭当前连接后,线程依然可以运行,这里提供一个将 jmeter命令设置为后台线程的方法. 使用setsid命令: setsid ...
- 第一节:mybatis入门
1.新建数据表 本次测试使用mysql数据,数据库名称为mybatis,新建一张表person,建表语句如下: CREATE TABLE `person` ( `id` ) PRIMARY KEY a ...
- 利用os和pandas来合并当前目录下所有excel文件
#1.引入模块 import os import pandas as pd #2.取出指定目录下的全部excel文件路径 path="C:\\TEST" dirlist=[] fo ...