多线程计数,每个线程累加10个数。

  实现:

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <pthread.h> pthread_mutex_t num_lock; int num = ;
int sum = ; void* foo1()
{
#if 1
pthread_mutex_lock(&num_lock);
for(int i = ;i<;++i)
{
num += ;
sum += num;
printf("thread 1,num = %d,sum = %d\n",num,sum);
usleep();
}
pthread_mutex_unlock(&num_lock);
#else
for(int i = ;i<;++i)
{
num += ;
sum += num;
printf("thread 1,num = %d,sum = %d\n",num,sum);
usleep();
}
#endif
return NULL;
} void* foo2()
{
#if 1
pthread_mutex_lock(&num_lock);
for(int i = ;i<;++i)
{
num += ;
sum += num;
printf("thread 2,num = %d,sum = %d\n",num,sum);
usleep();
}
pthread_mutex_unlock(&num_lock);
#else
for(int i = ;i<;++i)
{
num += ;
sum += num;
printf("thread 2,num = %d,sum = %d\n",num,sum);
usleep();
}
#endif
return NULL;
} int main(int argc,char* argv[])
{
pthread_t tid1,tid2;
int err; pthread_mutex_init(&num_lock,NULL); err = pthread_create(&tid1,NULL,foo1,NULL);
if(err != )
{
printf("error code:%d,reason:%s\n",err,strerror(err));
return -;
} err = pthread_create(&tid2,NULL,foo2,NULL);
if(err != )
{
printf("error code:%d,reason:%s\n",err,strerror(err));
return -;
} //for(int i = 0;i<10;++i)
// printf("main thread, num = %d\n",num++); err = pthread_join(tid1,NULL);
if(err != )
{
printf("error code:%d,reason:%s\n",err,strerror(err));
return -;
}
err = pthread_join(tid2,NULL);
if(err != )
{
printf("error code:%d,reason:%s\n",err,strerror(err));
return -;
} pthread_mutex_destroy(&num_lock); return ;
}

码海拾遗:Linux多线程mutex锁的更多相关文章

  1. 码海拾遗:Linux常用命令(一)

    一.Linux系统安装 系统安装可以分两类:实体机安装Linux,虚拟机(常用虚拟机软件有两种:VMware和VirtualBox)安装Linux. 安装过程网上有很多教程,这里就不赘述了. 二.常用 ...

  2. 码海拾遗:基于MySQL Connector/C++的MySQL操作(连接池)

    1.MySQL安装及简单设置 (1)安装:在OSX系统下,可以使用万能的“brew install”命令来进行安装:brew isntall mysql(默认安装最新版的MySQL) (2)启动:br ...

  3. 笔记1 linux 多线程 互斥锁

    //mutex lock #include<stdio.h> #include<unistd.h> #include<pthread.h> struct test ...

  4. 码海拾遗:strcpy()、strncpy()和strcpy_s()区别

    1.strcpy() 原型:char *strcpy(char *dst,const char *src) 功能:将以src为首地址的字符串复制到以dst为首地址的字符串,包括'\0'结束符,返回ds ...

  5. 码海拾遗:简单Socket(TCP)类实现

    最近刚开始啃Unix网络编程(卷1:套接字联网API),为加深TCP连接的建立和终止的理解与记忆,记下本文,方便以后翻看. 同时留下的还有简单的Socket(TCP)类: mySocket.h #pr ...

  6. 码海拾遗:简述C++(一)

    C++是Bjarne Stroustrup博士于1982年,在C语言的基础上引入并扩充了面向对象的概念后发明的一种新的程序语言.就与C语言的渊源而言,C++可以说是C语言的超集,它兼容C的一切(可能是 ...

  7. 码海拾遗:strstr()、strcmp()和strcpy()实现

    1.strstr()实现 原型:char * strstr(const char * str1, const char * str2) 说明:判断str2是否为str1的子串,如果是则返回str2第一 ...

  8. Linux多线程的使用一:互斥锁

    多线程经常会在Linux的开发中用到,我想把平时的使用和思考记录下来,一是给自己做个备忘,二是分享给可能会用到的人. POSIX标准下互斥锁是pthread_mutex_t,与之相关的函数有: 1 i ...

  9. Linux内核互斥锁--mutex

    一.定义: /linux/include/linux/mutex.h   二.作用及访问规则: 互斥锁主要用于实现内核中的互斥访问功能.内核互斥锁是在原子 API 之上实现的,但这对于内核用户是不可见 ...

随机推荐

  1. Python的IDE之Pycharm的使用

    Python的IDE之Pycharm的使用 一.为什么用IDE(Python集成开发环境-Pycharm) 到现在为止,我们也是写过代码的人啦,但你有没有发现,每次写代码要新建文件.写完保存时还要选择 ...

  2. Python笔记_第一篇_面向过程_第一部分_6.条件控制语句(if)

    Python正如其他语言一样存在两种常用的逻辑判断体(也叫结构化程序设计).所谓逻辑判断体是通过你想要完成的编程思路,通过在逻辑判断体中的相互判断和作用得到你想要的结果.逻辑判断体也叫控制语句,Pyt ...

  3. python 输入输出 条件判断 循环

    1.条件判断 score = int(input("请输入学生成绩:"))if score>100 and score <0: print("请输入正确的成绩 ...

  4. CSS 定位体系概述

    三种定位体系简介 框( box )布局影响因素之一,便是定位体系.定位体系也是其最为重要的影响因素. CSS2.1 中,一个框可以根据三种定位体系布局.CSS2.1 中的定位体系帮助作者使他们的文档更 ...

  5. zabbix监控Linux服务器丢包率

    http://www.ttlsa.com/zabbix/zabbix-simple-checks/  这个文章看了,还没有实践 1.先创建监控项,键值如下 icmppingloss[<121.1 ...

  6. mysql中datetime时间转字符串(避免java层映射为数字串)

    -- in_date datetime NULLDATE_FORMAT(ls.`in_date`,'%Y-%m-%d %T')AS create_time

  7. J. Stone game(背包问题)

    题:https://nanti.jisuanke.com/t/41420 定义 dp[x][y] 表示第 x 个数到最后一个数能组成和为 y 的方案数 #include<bits/stdc++. ...

  8. ununtu 16.04 下的 VsCode 下载与安装

    Vscode发现用包下载显示找不到网页,于是只有继续折腾. 折腾如下: ubuntu-desktop You can update your system with unsupported packa ...

  9. Ubuntu中Unable to acquire the dpkg frontend lock解决方案

    根据百度总结三种方式:第三种解决了我的问题 1. ps -e|grep apt-get 结果:6965 ? 00:00:01 apt-get 执行:sudo kill 6965 #强制解锁,会删除文件 ...

  10. id NSObject instanceType 区别

    id 当不确定数组元素类型时,可以选择使用id NSObject和id都可以指向任何对象 NSObject使用时必须强转 instantceType 只能返回和方法所在类相同类型的对象    返回值类 ...