浅析Linux下一个简单的多线程互斥锁的例子
#include <stdio.h>
#include <pthread.h>
pthread_mutex_t Device_mutex ;
int count=0;
void thread_func1()
{
while(1)
{
pthread_mutex_lock(&Device_mutex);
printf("thread1: %d\n",count);
pthread_mutex_unlock(&Device_mutex);
count++;
sleep(1);
}
}
void thread_func2()
{
while(1)
{
pthread_mutex_lock(&Device_mutex);
printf("thread2: %d\n",count);
pthread_mutex_unlock(&Device_mutex);
count++;
sleep(1);
}
}
int main()
{
pthread_t thread1, thread2;
pthread_mutex_init(&Device_mutex,NULL);
if(pthread_create(&thread1,NULL,(void*)thread_func1,NULL) == -1)
{
printf("create IP81 Thread error !\n");
exit(1);
}
sleep(1);
if(pthread_create(&thread2,NULL,(void *)thread_func2,NULL) == -1)
{
printf("create IP81_2 Thread error!\n");
exit(1);
}
sleep(1);
pthread_join(thread1,NULL);
pthread_join(thread2,NULL);
pthread_mutex_destroy(&Device_mutex);
return 0;
}
相关推荐
-
linux下的C\C++多进程多线程编程实例详解
linux下的C\C++多进程多线程编程实例详解 1.多进程编程 #include <stdlib.h> #include <sys/types.h> #include <unistd.h> int main() { pid_t child_pid; /* 创建一个子进程 */ child_pid = fork(); if(child_pid == 0) { printf("child pid\n"); exit(0); } else { print
-
详解Linux多线程使用信号量同步
信号量.同步这些名词在进程间通信时就已经说过,在这里它们的意思是相同的,只不过是同步的对象不同而已.但是下面介绍的信号量的接口是用于线程的信号量,注意不要跟用于进程间通信的信号量混淆. 一.什么是信号量 线程的信号量与进程间通信中使用的信号量的概念是一样,它是一种特殊的变量,它可以被增加或减少,但对其的关键访问被保证是原子操作.如果一个程序中有多个线程试图改变一个信号量的值,系统将保证所有的操作都将依次进行. 而只有0和1两种取值的信号量叫做二进制信号量,在这里将重点介绍.而信号量一般常用于保护
-
linux多线程编程(四)
linux线程分为两类:一是核心级支持线程,二是用户级的线程.一般都为用户级的线程. 一.多线程的几个常见函数 要创建多线程必须加载pthread.h文件,库文件pthread.线程的标识符pthread_t在头文件/usr/include/bits/pthreadtypes.h中定义:typedef unsigned long int pthread_t 1.创建线程: int pthread_create(pthread_t *restrict thread,
-
linux多线程编程详解教程(线程通过信号量实现通信代码)
线程分类 线程按照其调度者可以分为用户级线程和核心级线程两种. (1)用户级线程 用户级线程主要解决的是上下文切换的问题,它的调度算法和调度过程全部由用户自行选择决定,在运行时不需要特定的内核支持.在这里,操作系统往往会提供一个用户空间的线程库,该线程库提供了线程的创建.调度.撤销等功能,而内核仍然仅对进程进行管理.如果一个进程中的某一个线程调用了一个阻塞的系统调用,那么该进程包括该进程中的其他所有线程也同时被阻塞.这种用户级线程的主要缺点是在一个进程中的多个线程的调度中无法发挥多处理器的优势.
-
Linux多线程编程(一)
一.什么是线程? 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 二.什么时候使用多线程? 当多个任务可以并行执行时,可以为每个任务启动一个线程. 三.线程的创建 使用pthread_create函数. #include<pthread.h> int pthread_create
-
Linux中多线程详解及简单实例
Linux中多线程详解及简单实例 1.概念 进程:运行中的程序. 线程:一个程序中的多个执行路径.更准确的定义是:线程是一个进程内部的一个控制序列. 2.为什么要有线程? 用fork调用进程代价太高,需要让一个进程同时做多件事情,线程就非常有用. 3.线程的优点和缺点. 优点: (1)有时,让程序看起来是在同时做两件事是非常有用的. 比如在编辑文档时,还能统计文档里的单词个数. (2)一个混杂着输入.计算.输出的程序,利用线程可以将这3个部 分分成3个线程来执行,从而改变程序执行的性能. (3)
-
Linux多线程环境下 关于进程线程终止函数总结
pthread_kill: pthread_kill与kill有区别,是向线程发送signal.,大部分signal的默认动作是终止进程的运行,所以,我们才要用signal()去抓信号并加上处理函数. int pthread_kill(pthread_t thread, int sig); 向指定ID的线程发送sig信号,如果线程代码内不做处理,则按照信号默认的行为影响整个进程,也就是说,如果你给一个线程发送了SIGQUIT,但线程却没有实现signal处理函数,则整个进程退出. pthread
-
Linux多线程锁属性设置方法
互斥锁是Linux下多线程资源保护的常用手段,但是在时序复杂的情况下,很容易会出现死锁的情况. 可以通过设置锁的属性,避免同一条线程重复上锁导致死锁的问题. 通过int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type)接口设置 一般是以下四种属性: PTHREAD_MUTEX_NORMAL This type of mutex does not detect deadlock. A thread attempting t
-
Linux下的多线程编程(三)
下面先来一个实例.我们通过创建两个线程来实现对一个数的递加. 或许这个实例没有实际运用的价值,但是稍微改动一下,我们就可以用到其他地方去拉. 下面是我们的代码: /*thread_example.c : c multiple thread programming in linux *author : falcon *E-mail : tunzhj03@st.lzu.edu.cn */ #include <pthread.h> #include <stdio.h> #include
-
浅析Linux下一个简单的多线程互斥锁的例子
复制代码 代码如下: #include <stdio.h>#include <pthread.h>pthread_mutex_t Device_mutex ;int count=0;void thread_func1(){ while(1) { pthread_mutex_lock(&Device_mutex); printf("thread1: %d\n",count); pthread_mutex_unlo
-
linux下c语言的多线程编程
我们在写linux的服务的时候,经常会用到linux的多线程技术以提高程序性能 多线程的一些小知识: 一个应用程序可以启动若干个线程. 线程(Lightweight Process,LWP),是程序执行的最小单元. 一般一个最简单的程序最少会有一个线程,就是程序本身,也就是主函数(单线程的进程可以简单的认为只有一个线程的进程) 一个线程阻塞并不会影响到另外一个线程. 多线程的进程可以尽可能的利用系统CPU资源. 1创建线程 先上一段在一个进程中创建一个线程的简单的代码,然后慢慢深入. #incl
-
python多线程互斥锁与死锁问题详解
目录 一.多线程共享全局变量 二.给线程加一把锁锁 三.死锁问题 总结 一.多线程共享全局变量 代码实现的功能: 创建work01与worker02函数,对全局变量进行加一操作创建main函数,生成两个线程,同时调用两个函数 代码如下: import threading result = 0 # 定义全局变量result def work1(num): global result for i in range(num): result += 1 print('------from work1--
-
python多线程互斥锁与死锁
目录 一.多线程间的资源竞争 二.互斥锁 1.互斥锁示例 2.可重入锁与不可重入锁 三.死锁 一.多线程间的资源竞争 以下列task1(),task2()两个函数为例,分别将对全局变量num加一重复一千万次循环(数据大一些,太小的话执行太快,达不到验证的效果). import threading import time num = 0 def task1(nums): global num for i in range(nums): num += 1 pr
-
浅析Linux下利用coredump技术追查进程崩溃原因
最近项目中出现了一个问题,服务器端程序会突然崩溃退出,我们采取了coredump技术以找到崩溃原因,即确定进程退出时正在执行的函数是哪个,其状态如何. 如果系统开启了coredump,准确的说如果当前的shell环境开启了coredump,当前shell环境下的程序崩溃退出时,会把当时进程的栈的内存状态写入core文件.使用gdb可以查看这个core文件中保存的栈的状态,gdb a.out core.(关于coredump的开启和对shell的理解,请参考本人另一篇博客<使用dotnet-dum
-
用Python实现一个简单的多线程TCP服务器的教程
最近看<python核心编程>,书中实现了一个简单的1对1的TCPserver,但是在实际使用中1对1的形势明显是不行的,所以研究了一下如何在server端通过启动不同的线程(进程)来实现每个链接一个线程. 其实python在类的设计上已经考虑到了这一方面的需求,我们只要在自己的server上继承一下SocketServer.BaseRequestHandler就可以了. server端代码如下: #!/usr/bin/env python import SocketServer from t
-
C++多线程互斥锁和条件变量的详解
目录 互斥锁: std::mutex::try_lock 条件变量:condition_variable 总结 我们了解互斥量和条件变量之前,我们先来看一下为什么要有互斥量和条件变量这两个东西,了解为什么有这两东西之后,理解起来后面的东西就简单很多了!!! 先来看下面这段简单的代码: int g_num = 0; void print(int id) { for (int i = 0; i < 5; i++) { ++g_num; cout << "id = " &l
-
简单的JavaScript互斥锁分享
去年有几个项目需要使用JavaScript互斥锁,所以写了几个类似的,这是其中一个: 复制代码 代码如下: //Published by Indream Luo//Contact: indreamluo@qq.com//Version: Chinese 1.0.0 !function ($) { window.indream = window.indream || {}; $.indream = indream; indream.async = { //
-
浅析Linux下那些超有趣的命令
yes:输出一串y,有时可以用来对付很多y/n选择的应用 .输出很多... banner:打印字符标题,就是用字符拼出大字来 ,最好把窗口最大化,否则可能显示不全. ddate:把日历转成什么其他历,Today is Sweetmorn, the 63rd day of Discord in the YOLD 3173 fortune:输出一句话,内容有很多种,据说有唐诗宋词(有唐诗宋词的是fortune-zh,安装完之后,fortune会随机的输出唐诗宋词或英文名言.) cal 9 1752:
-
架设linux下最简单的VPN系统
本文是根据我公司的实际应用情况写的,但是稍加修改即可应用到很多地方,系统运行的两个月来,证明还是安全可靠稳定的,呵... 我公司在北京,但是主要设备都在南京电信的一个主要IDC里,那边有我们的两个PIX525UR(做了故障切换),上面做了严格的访问控制,因此,为了方便公司里的移动,出差及在家的员工办公,才有了做VPN系统的想法.好使具有相应权限的使用者从个人PC通过支持MPPE128的加密隧道连接至公司的VPN Server,再通过VPN Server将数据转发到南京IDC的我公司应用网络,其间
随机推荐
- Python xlrd读取excel日期类型的2种方法
- Oracle SQL tuning 数据库优化步骤分享(图文教程)
- javascript学习笔记(七)Ajax和Http状态码
- 探讨AngularJs中ui.route的简单应用
- 备份恢复分区表的工具Disk Genius使用详解第1/4页
- php中获取远程客户端的真实ip地址的方法
- PHP中动态HTML的输出技术
- asp循环语句总结
- 10个C#程序员经常用到的实用代码片段
- PHP 日期加减的类,很不错
- java实现十六进制字符unicode与中英文转换示例
- jQuery:节点(插入,复制,替换,删除)操作
- Android开发学习笔记之通过API接口将LaTex数学函数表达式转化为图片形式
- Android 屏蔽和捕获Home键的示例代码
- jQuery使用$.get()方法从服务器文件载入数据实例
- Java 获取泛型的类型实例详解
- 分享一份nginx重启脚本
- ASP编程入门进阶(八):内置对象Session
- Java探索之string字符串的应用代码示例
- 选择Spring Boot项目的内嵌容器的理由