[C++]多线程: 教你写第一个线程
来源:互联网 发布:文字编辑软件 编辑:程序博客网 时间:2024/06/05 12:46
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 2pthread_t thread[MAX_THREAD];pthread_mutex_t mut;int num = 0;void* thread1(void *args){ printf("hi, I am thread1\n"); for(int i=0; i < 6; i++){ pthread_mutex_lock(&mut); printf("[thread1]num=%d, i=%d\n", num, i); num ++; pthread_mutex_unlock(&mut); sleep(2); } pthread_exit(NULL);}void* thread2(void *args){ printf("hi, I am thread2\n"); for(int i = 0; i < 10; i++) { pthread_mutex_lock(&mut); printf("[thread2]num=%d, i=%d\n", num, i); num ++; pthread_mutex_unlock(&mut); sleep(3); } pthread_exit(NULL);}void thread_create(){ memset(&thread, 0, sizeof(thread)); if( 0!=pthread_create(&thread[0], NULL, thread1, NULL)) printf("thread1 create faild\n"); else printf("thread1 established\n"); if( 0 != pthread_create(&thread[1], NULL, thread2, NULL)) printf("thread2 create faild\n"); else printf("thread2 established\n");}void thread_wait(){ if(0 != thread[0]) { pthread_join(thread[0], NULL); printf("thread 1 is over\n"); } if(0 != thread[1]) { pthread_join(thread[1], 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 0;}
代码,得到结果:
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))
参数
- 第一个参数是被等待线程的标识符
- 第二个参数是用户自定义的指针。用来存储被等待线程的返回值
0 0
- [C++]多线程: 教你写第一个线程
- 实战JBOSS――教你写第一个EJB
- 实战JBOSS――教你写第一个EJB
- 实战JBOSS――教你写第一个EJB
- 实战JBOSS――教你写第一个EJB
- 手把手教你写第一个NHibernate小程序
- 手把手教你写第一个Linux驱动程序
- 写得第一个linux下面c的多线程的例子
- 实战JBOSS――教你写第一个EJB---1
- 实战JBOSS――教你写第一个EJB----2
- 实战JBOSS――教你写第一个EJB-----3
- 第一个写文章
- 我的第一个完全自己写的C程序
- 我在VC上写的第一个C程序
- 使用c写的第一个hello world!
- 学c语言第一个自己写的计算器程序
- Ubuntu16.04环境下写第一个C语言程序
- windows 多线程 c语言 第一个实现 呼呼
- 02-线性结构4 Pop Sequence (25分)
- 2017.3.15读完《围城》
- java swing
- HDU2717(POJ3278):Catch That Cow
- ECMAScript6
- [C++]多线程: 教你写第一个线程
- timestamp String date 三者之间的转换,以及DB中的判断 转换时候的注意事项
- 博客新开新人报道博客文
- linux初学者周周感悟--2
- JavaFileWriter
- 幸运数 蓝桥杯历年试题
- 动态规划 拿糖果
- Android基础
- echarts-wordcloud绘制词云图之空串问题。