c++线程sleep_C语⾔多线程编程(⼀)
win下的多线程编程。
linux下多线程的编程基本属于即开即⽤的情况,在这⾥主要介绍win下
(PS:这也win下pthread.h的环境可以参考下⾯的⽂章,傻⽠式点对点的告诉你在VS2017编辑器下怎么配置phread.h (PS:这也如果不知道怎么配置win
是我写的)
blog.csdn/qq_35292447/article/details/103541936b log.csdn
基本概念
什么是线程?
进程中⼀个单⼀顺序的控制流,⼀个进程中可以并发多个线程,每条线程并⾏执⾏不同的任务,进程内。⼀条线程指的是进程
⾸先线程是包含在进程
线程之间资源是共享的。
多线程的优势?
如果只有⼀个线程,那么任务就是顺序执⾏的,你必须等待前⾯的任务完成,才能执⾏下⼀个任务。
引⼊多线程则可以在你执⾏某个任务的过程中,执⾏其他任务。所以在耗时多任务中,应⽤⾮常⼴泛。
代码介绍
pthread_create
简述:创建线程。
第⼀个参数为指向线程标识符的指针。
第⼆个参数⽤来设置线程属性。
第三个参数是线程运⾏函数的起始地址。
最后⼀个参数是运⾏函数的参数。
int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,
(void*)(*start_rtn)(void*),void *arg);
pthread_exit
简述:调⽤这个函数可以显⽰得退出线程
void  pthread_exit(void  *retval);
pthread_join
,使⼀个线程等待另⼀个线程结束,主要于线程间同步的操作。不使⽤的话,该线程结束后并不会释放其内简述:⽤来等待⼀个线程的结束,使⼀个线程等待另⼀个线程结束
存空间,这会导致该线程变成了“僵⼫线程”。
thread: 线程标识符,即线程ID,标识唯⼀线程。
linux下的sleep函数
retval: ⽤户定义的指针
int pthread_join(pthread_t thread, void **retval);
pthread_detach
pthread_join()函数的替代函数。如果tid尚未终⽌,pthread_detach()不简述:主线程与⼦线程分离,⼦线程结束后,资源⾃动回收。pthread_join()函数的替代函数
会终⽌该线程。
int pthread_join(pthread_t thread, void **retval);
举例
#include <stdio.h>
#include <pthread.h>
#include <time.h>
#include <windows.h>//使⽤Sleep的头
int g_number = 0;
#define MAX_COUNT 10000
//pthread_mutex_t mut;
void *counter3(void* args) {
int i = 1;
while (i <= MAX_COUNT / 4) {
//pthread_mutex_lock(&mut);
g_number++;
//pthread_mutex_unlock(&mut);
printf("hi,i am pthread 3, my g_number is [%d]n", g_number);  Sleep(1);// 单位ms
i++;
}
}
void *counter4(void* args) {
int j = 1;
while (j <= MAX_COUNT / 4) {
//pthread_mutex_lock(&mut);
g_number++;
//pthread_mutex_unlock(&mut);
printf("hi,i am pthread 4, my g_number is [%d]n", g_number);  Sleep(1);
j++;
}
}
int main() {
//pthread_mutex_init(&mut, NULL);
pthread_t t3;
pthread_t t4;
pthread_create(&t3, NULL, counter3, NULL);
pthread_create(&t4, NULL, counter4, NULL);
getchar();
return 0;
}
输出
留下个⼏个思考题:
1、为什么少加了⼏个?根本原因是什么?
代码的判断条件或者sleep或者pthread_mutex_lock 去解决这个问题,让他输出为5000?哪种⽅法更好?
2、怎么通过更改 代码的判断条件或者sleep或者pthread_mutex_lock
3、写个for循环5000次+sleep(1)看看耗时多少,对⽐多线程和单线程时间的差异。
jeremie:C语⾔多线程编程(⼆)z huanlan.zhihu
jeremie:C语⾔多线程编程(三)——信号量z huanlan.zhihu
jeremie:C语⾔多线程编程(四)——线程池z huanlan.zhihu

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。