多线程计数,每个线程累加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 学习笔记:根据输入年月获取该月的第一天和最后一天

    目的: 给定一个时间,比如:2020.02,要求返回所输入月份的第一天及最后一天,比如:('2020.02.01', '2020.02.29') 参考博客:https://blog.csdn.net/ ...

  2. SQL: all 运算符 可以 表示 非空(NOT NULL)的意思吗?

    select count(all grade) from customer; SELECT COUNT(DISTINCT customer_id) FROM customer WHERE grade ...

  3. Nginx模块-ngx_http_mirror_module-流量复制

    参考1:https://www.cnblogs.com/cjsblog/p/12163207.html Nginx流量复制 需求 将生产环境的流量拷贝到预上线环境或测试环境,这样做有很多好处,比如: ...

  4. jupyterhub 安装配置

    安装 安装 anaconda3, 从https://www.anaconda.com/distribution/下载. 国内有代理,见这里 但不如官网新. 安装 sudo /opt/anaconda3 ...

  5. 17.3.15---关于GPIO控制流水灯的信息

    添加一个网址: http://rmingwang.com/gpio-control-flow-lamp-code-archive.html 还有一个 http://www.openedv.com/po ...

  6. 容斥原理的(二进制思想和质因子分解+模板)hdu4135+ecf81.D

    题:http://acm.hdu.edu.cn/showproblem.php?pid=4135 题意:求[A,B]与N互质的数的个数 #include<iostream> #includ ...

  7. 2019-2020-1 20199324《Linux内核原理与分析》第八周作业

    第七章 可执行程序工作原理 一.ELF目标文件格式 目标文件:ABI,应用程序二进制接口,是编译器生成的文件. ELF:可执行的和可链接的格式,是一个目标文件格式的标准.三种类型是: 可重定位文件:L ...

  8. 21)PHP,杨辉三角

    代码展示: $n=; ;$i<=$n;$i++){ ;$k<=$i;$k++){ ||$k==$i){ $arr[$i][$k]=; }else{ ){ $arr[$i][$k] = $a ...

  9. Python - 使用 PostgreSQL 数据库

    基本用法 # -*- coding: utf-8 -*- # !/usr/bin/python # 需要安装下面的驱动包 import psycopg2 # 连接到一个现有的数据库,如果数据库不存在, ...

  10. Qt 信息提示框 QMessageBox

    information QMessageBox::information(NULL, "Title","Content",QMessageBox::Yes | ...