[C++]多线程: 教你写第一个线程
原文:http://blog.csdn.net/cn_wk/article/details/62236057
hello thread!
声明线程A的端口号
#include <pthread.h> pthread_t tid;定义线程运行函数
void thread_function(void *args)
{
printf("thread_function is called!\n");
//注意区别 cout << "thread_function is called! << endl; 和上一行
}创建线程
pthread_create(&tid, NULL, &thread_function, NULL);(optional)阻塞: 挂起当前线程,直到tid线程结束
pthread_join(tid, NULL);
好了,这样就可以启一个线程了,完整代码如下:
#include<unistd.h>
#include<stdio.h>
#include<cstring>
#define MAX_THREAD 2 pthread_t thread[MAX_THREAD];
pthread_mutex_t mut; int num = ;
void* thread1(void *args)
{
printf("hi, I am thread1\n");
for(int i=; i < ; i++){
pthread_mutex_lock(&mut);
printf("[thread1]num=%d, i=%d\n", num, i);
num ++;
pthread_mutex_unlock(&mut);
sleep();
}
pthread_exit(NULL);
} void* thread2(void *args)
{
printf("hi, I am thread2\n");
for(int i = ; i < ; i++)
{
pthread_mutex_lock(&mut);
printf("[thread2]num=%d, i=%d\n", num, i);
num ++;
pthread_mutex_unlock(&mut);
sleep();
}
pthread_exit(NULL);
} void thread_create()
{
memset(&thread, , sizeof(thread));
if( !=pthread_create(&thread[], NULL, thread1, NULL))
printf("thread1 create faild\n");
else
printf("thread1 established\n"); if( != pthread_create(&thread[], NULL, thread2, NULL))
printf("thread2 create faild\n");
else
printf("thread2 established\n"); } void thread_wait()
{
if( != thread[])
{
pthread_join(thread[], NULL);
printf("thread 1 is over\n");
} if( != thread[])
{
pthread_join(thread[], NULL);
printf("thread 2 is over\n");
}
} int main()
{
pthread_mutex_init(&mut, NULL);
printf("main thread: creating threads...\n");
thread_create();
printf("main thread: waiting threads to accomplish task...\n");
thread_wait();
return ;
}
代码,得到结果:
tmain thread: creating threads…
thread1 established
hi, I am thread1
[thread1]num=0, i=0
thread2 established
main thread: waiting threads to accomplish task…
hi, I am thread2
[thread2]num=1, i=0
[thread1]num=2, i=1
[thread2]num=3, i=1
[thread1]num=4, i=2
[thread2]num=5, i=2
[thread1]num=6, i=3
[thread1]num=7, i=4
[thread2]num=8, i=3
[thread1]num=9, i=5
[thread2]num=10, i=4
thread 1 is over
[thread2]num=11, i=5
[thread2]num=12, i=6
[thread2]num=13, i=7
[thread2]num=14, i=8
[thread2]num=15, i=9
thread 2 is over
OK,现在说一下pthread_create方法的原型
pthread_create方法
作用
- 创建线程
原型
```
int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg);
```
参数
- 第一个参数是指向线程标识符的指针
- 第二个参数用来设置线程的属性
- 第三个参数是线程运行函数的首地址
- 第四个参数是线程运行函数的参数
返回值
- 若成功,则返回0;否则,返回错误编号。
pthread_join方法
作用
- 这个函数是一个线程阻塞的函数
- 等待线程结束再继续往下执行,要不然主进程和下面的线程并行执行
原型
extern int pthread_join __P ((pthread_t __th, void **__thread_return))
参数
- 第一个参数是被等待线程的标识符
- 第二个参数是用户自定义的指针。用来存储被等待线程的返回值
[C++]多线程: 教你写第一个线程的更多相关文章
- 用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1
package com.ljn.base; /** * @author lijinnan * @date:2013-9-12 上午9:55:32 */ public class IncDecThrea ...
- Java 多线程详解(五)------线程的声明周期
Java 多线程详解(一)------概念的引入:http://www.cnblogs.com/ysocean/p/6882988.html Java 多线程详解(二)------如何创建进程和线程: ...
- 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接
本文原作者:“水晶虾饺”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.引言 好多小白初次接触即时通讯(比如:IM或者消息推送应用)时,总是不 ...
- Android多线程编程<一>Android中启动子线程的方法
我们知道在Android中,要更新UI只能在UI主线程去更新,而不允许在子线程直接去操作UI,但是很多时候,很多耗时的工作都交给子线程去实现,当子线程执行完这些耗时的工作后,我们希望去修改 ...
- Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) JAVA日志的前世今生 .NET MVC采用SignalR更新在线用户数 C#多线程编程系列(五)- 使用任务并行库 C#多线程编程系列(三)- 线程同步 C#多线程编程系列(二)- 线程基础 C#多线程编程系列(一)- 简介
Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 ...
- iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用
目的 本文主要是分享iOS多线程的相关内容,为了更系统的讲解,将分为以下7个方面来展开描述. 多线程的基本概念 线程的状态与生命周期 多线程的四种解决方案:pthread,NSThread,GCD,N ...
- 多线程的基本概念和Delphi线程对象Tthread介绍
多线程的基本概念和Delphi线程对象Tthread介绍 作者:xiaoru WIN 98/NT/2000/XP是个多任务操作系统,也就是:一个进程可以划分为多个线程,每个线程轮流占用CPU运行 ...
- 手把手教你写LKM rookit! 之 第一个lkm程序及模块隐藏(一)
唉,一开始在纠结起个什么名字,感觉名字常常的很装逼,于是起了个这<手把手教你写LKM rookit> 我觉得: 你们觉得:...... 开始之前,我们先来理解一句话:一切的操作都是系统调用 ...
- 手把手教你写电商爬虫-第三课 实战尚妆网AJAX请求处理和内容提取
版权声明:本文为博主原创文章,未经博主允许不得转载. 系列教程: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 看完两篇,相信大家已经从开始的 ...
随机推荐
- 通过源码看原理之 selenium
# selenium的历史1. selenium1.x:这个时候的selenium,使用的是JavaScript注入技术与浏览器打交道,需要Selenium RC启动一个Server,将操作Web元素 ...
- JS正则表达式端口号,IP地址
端口号:65535 正则:/^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6 ...
- 北航操作系统实验2019:Lab4-1流程梳理
北航操作系统实验2019:Lab4-1流程梳理 前言 操作系统的实验课实在令人头秃.我们需要在两周时间内学习相关知识.读懂指导书.读懂代码.补全代码.处理玄学bug和祖传bug,以及回答令人窒息的思考 ...
- How to deal with the problem '<' in OpenERP's view file
In this case,if you write some stirng in your fields which contains '<' , OpenERP will give a err ...
- 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装Theano(图文详解)
不多说,直接上干货! Theano的安装教程目前网上一搜很多,前几天折腾了好久,终于安装成功了Anaconda3(Python3)的Theano,嗯~发博客总结并分享下经验教训吧. 渣电脑,显卡用的是 ...
- 几个用Python实现的简单算法
一.算法题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. 程序源 ...
- python-select异步IO
#实现多任务在同一个线程切换 #!/usr/bin/python from socket import * from select import * from time import ctime so ...
- JavaScript设计模式-1.函数
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- eclipse 配置mapreduce环境出错
初学mapreduce,想在eclipse上配置mapreduce的环境,网上之类的教程,很多但是按照教程配之后,并不能正常运行. 碰到下面的错误: 15/10/17 20:10:39 INFO jv ...
- 10w定时任务,如何高效触发超时
一.缘起 很多时候,业务有定时任务或者定时超时的需求,当任务量很大时,可能需要维护大量的timer,或者进行低效的扫描. 例如:58到家APP实时消息通道系统,对每个用户会维护一个APP到服务器的TC ...