linux 中多线程使用
/*
* 对于线程之间的操作:
* 一个进程中会有多个线程,各个线程之间的或向切换会付出很小的代价相比于进程之间的切换
* 为什么要引入多线程:
* 1.与进程相比,他是一种非常节俭的多任务的操作方式。文们知道,在linux系统下,启动一个新的进程,
* 必须分配一个独立的地址空间,建立众多的数据表来维护它的代码段,堆栈段和数据段,这是一种开销和维护成本比较大的多任务工作方式。
* 而运行一个进程中的多个线程,他们彼此之间使用相同的地址空间,共享大部分的数据,启动一个线程花费的时间和空间远小于启动一个进程
* 所花费的空间;
* 2.线程间的通信比较方便,对于不同的进程来说,他们具有独立的数据空间,要进行数据传递只能以通信的方式进行,这种方式不仅费时,而且不方便
* 线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其他线程所用。
* 3.提高应用程序的响应;
* 4.使多CPU系统更加有效,操作系统会保证当线程数不大于CPU数目时,不同的线程运行在不同的CPU上
* 5.改善程序结构,一个即长有复杂的进程,可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样程序便于理解和修改
* */ #include <pthread.h>
#include <sys/time.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/resource.h> #define MAX 10 pthread_t thread[2];
pthread_mutex_t mut;
int number = 0,i; void * thread1(void * )
{
printf("thread1 : I'm thread 1\n");
for(i=0; i<MAX; i++)
{
pthread_mutex_lock(&mut);
printf("thread1 : number = %d\n",number);
number++;
pthread_mutex_unlock(&mut);
msleep(1000*100);
}
printf("thread1 :wait the main thread to finish the task?\n");
pthread_exit(NULL);
} void * thread2(void * )
{
printf("thread2 : I'm thread 2\n");
for(i=0; i<MAX; i++)
{
pthread_mutex_lock(&mut);
printf("thread2 : number = %d\n",number);
number--;
pthread_mutex_unlock(&mut);
msleep(1000*100);
}
printf("thread2 :wait the main thread to finish the task?\n");
pthread_exit(NULL);
} void thread_create(void)
{
int temp;
memset(&thread,0,sizeof(thread));
temp = pthread_create(&thread[0],NULL,thread1,NULL);
if(temp != 0)
printf("create thread 1 failed\n");
else
printf("create thread 1 successful\n"); temp = pthread_create(&thread[1],NULL,thread2,NULL);
if(temp != 0)
printf("create thread 2 failed\n");
else
printf("create thread 2 successful\n");
} void thread_wait(void)
{
if(thread[0] != 0)
{
pthread_join(thread[0],NULL);
printf("thread 1 has finished \n");
}
if(thread[1] != 0)
{
pthread_join(thread[0],NULL);
printf("thread 2 has finished \n");
}
} int main()
{
pthread_mutex_init(&mut,NULL);
printf("I am the main thread\n");
thread_create();
printf("Main thread wait other thread run\n");
thread_wait();
return 0;
}
在我笔记本上的运行结果是:
I am the main thread
create thread 1 successful
create thread 2 successful
Main thread wait other thread run
thread2 : I'm thread 2
thread1 : I'm thread 1
thread2 : number = 0
thread1 : number = -1
thread2 : number = 0
thread1 : number = -1
thread2 : number = 0
thread1 : number = -1
thread1 : number = 0
thread2 : number = 1
thread2 : number = 0
thread1 : number = -1
thread2 : number = 0
thread1 : number = -1
thread1 : number = 0
thread2 : number = 1
thread2 :wait the main thread to finish the task?
thread1 :wait the main thread to finish the task?
thread 1 has finished
thread 2 has finished
linux 中多线程使用的更多相关文章
- linux中多线程解析
Linux系统下的多线程遵循POSIX线程接口,称为 pthread.编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a.顺便说一下,Linux ...
- Linux中多线程信号的处理
1. 博文:Linux多线程中使用信号-1 http://blog.csdn.net/qq276592716/article/details/7325250 2. 博文:Linux多线程信号总结 ...
- 【转】Linux中多线程wait使用注意
使用管道生成的while,是无法进行并发管理的 在处理日志的时候,采用管道多线程,怎么都实现不了wait功能,经上篇文章才知道,使用管道生成的while,无法进行并发管理. while read qu ...
- Linux中线程的挂起与恢复(进程暂停)
http://www.linuxidc.com/Linux/2013-09/90156.htm 今天在网上查了一下Linux中对进程的挂起与恢复的实现,相关资料少的可怜,大部分都是粘贴复制.也没有完整 ...
- Linux中查看进程的多线程
在SMP系统中,我们的应用程序经常使用多线程的技术,那么在Linux中如何查看某个进程的多个线程呢? 本文介绍3种命令来查看Linux系统中的线程(LWP)的情况: 在我的系统中,用qemu-syst ...
- Linux中查看进程的多线程pstree, ps -L
Linux中查看进程的多线程 在SMP系统中,我们的应用程序经常使用多线程的技术,那么在Linux中如何查看某个进程的多个线程呢? 本文介绍3种命令来查看Linux系统中的线程(LWP)的情况:在我的 ...
- linux 中 eclipse 开发 c/c++ 多线程程序,添加 libpthread.a 库支持
导入头文件 在 linux 中开发多线程程序,在使用到 pthread 系列函数的文件中,需要导入头文件: #include <pthread.h> 链接 libpthread.a 在编译 ...
- linux中c多线程同步方法
https://blog.csdn.net/jkx01whg/article/details/78119189 Linux下提供了多种方式来处理线程同步,最常用的是互斥锁.条件变量和信号量. 一.互斥 ...
- [转]Linux 的多线程编程的高效开发经验
Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多线程 API 有一些细微和隐晦的差别.不注意这些 Linux 上的一些开发陷阱,常常会导致程序问题不穷,死锁不断.本文中我们 ...
随机推荐
- 转 --maven系列之一 简介
http://blog.csdn.net/jiuqiyuliang/article/details/41076215 [项目管理和构建]——Maven简介(一) 2015-01-31 21:27 68 ...
- 5.7.2.4 random() 方法
Math.random()方法返回大于等于0小于1的一个随机数.对于某些站点来说,这个方法非常实用,因为可以利用它来随机显示一些名人名言和新闻事件.套用下面的公式,就可以利用Math.random() ...
- 汉化testlink
testlink版本:1.9.13 1.登录testlink后,打开my setting(左上角小人人) 2.Locale 选择chinese,然后点击save 3.over,汉化完毕
- java 构造方法 constructor demo笔记
demo 地址 http://pan.baidu.com/s/1bo2FG1T package com.ws.study; /** * @author Administrator * */ publi ...
- Qt中如果通过QStyle自定义能够跨平台的界面控件
我们经常会碰到需要定制界面控件的要求.如果只是在一个平台上,比如说你的控件只需要在Windows上显示,那很好办,Hard code 你的look and feel就可以了.但是如果界面需要在不同平台 ...
- HDU 4436 str2int(后缀自动机)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=4436 [题目大意] 给出一些字符串,由0~9组成,求出所有不同子串的和. [题解] 将所有字符串添 ...
- Noip2013调试技巧
关于调试技巧,个人觉得还是很重要的,于是把自己之前写过的总结拿出来,修修补补再复习一下. F7 单步跟踪法 这是大家都最常用的调试方法,可以一步一步去跟踪程序的运行方向,以及各种变量的变化情况,当发现 ...
- Android Develop【转】
[Android Develop] Android实现伸缩弹力分布菜单效果 摘要: 本文介绍下在Android中实现伸缩弹力分布菜单效果.关于这种菜单效果在IPhone中比较常见,效果比较酷.那么 ...
- Java 程序中的多线程
概述 synchronized 关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C. D等)正在用这个方法,有的话要等正在使用synch ...
- 解决 Tomcat reload WARNING [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web application [] registered the JDBC driver [com.mysql.jdbc.Driver] but fail
转自:http://www.cnblogs.com/interdrp/p/5632529.html 我的错误如下: 06-Sep-2016 18:57:10.595 WARNING [localhos ...