重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1、C++多线程也可以使用UNIX C的库函数,pthread_mutex_t,pthread_create,pthread_cond_t,pthread_detach,pthread_mutex_lock/unlock,等等。在使用多线程的时候,你需要先创建线程,使用pthread_create,你可以使主线程等待子线程使用pthread_join,也可以使线程分离,使用pthread_detach。线程使用中最大的问题就是同步问题,一般使用生产着消费者模型进行处理,使用条件变量pthread_cond_t,pthread_mutex,pthread_cond_wait来实现。
我们提供的服务有:成都网站设计、网站建设、微信公众号开发、网站优化、网站认证、广阳ssl等。为上千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的广阳网站制作公司
2、例程:
//创建5个线程
#include pthread.h
#include stdlib.h
void* work_thread(void* arg)
{
//线程执行体
return 0;
}
int main(int argc,char* argv[])
{
int nthread = 5;//创建线程的个数
pthread_t tid;//声明一个线程ID的变量;
for(int i=0;inthread;i++)
{
pthread_create(tid,NULL,work_thread,NULL);
}
sleep(60);//睡眠一分钟,你可以看下线程的运行情况,不然主进程会很快节结束了。
}
pthread_create(tid,NULL,work_thread,NULL);//创建线程的函数,第一个参数返回线程的ID;第二个参数是线程的属性,一般都置为NULL;第三个参数是线程函数,线程在启动以后,会自动执行这个函数;第四个参数是线程函数的参数,如果有需要传递给线程函数的参数,可以放在这个位置,可以是基础类型,如果你有不止一个参数想传进线程函数,可以做一个结构体,然后传入。
同时执行,使用线程了
C语言本身没有提供线程的功能,只能调用平台的线程来实现
如果在 WINDOWS 下面,可以参考一下 CreateThread 方法
c语言中一个完整的函数由函数首部和函数体构成,而且定义函数时两者都是必不可少的。
函数定义的一般形式如下:
类型标识符
函数名(形参表列)
//
这是函数首部
//
以下{
}内的是函数体
{
说明部分
执行部分
}
举例说明如下:
//
定义一个不带返回值的函数
//
函数功能:输出形参的值
void
fun(int
a,
int
b)
{
printf("%d,
%d\n",
a,
b);
}
//
定义一个带返回值的函数
//
函数功能:返回2个整数数的最大值
int
fun(int
a,
int
b)
{
return
ab
?
a
:
b;
}
C语言是顺序执行的,所以在一台机器上,是不可能同时执行两个while(1)的。除非你用多线程,将两个while(1)放在两个线程里面,是可以达到同时执行的效果。但严格上来说也并不是同时执行的,在同一时刻只会执行其中一个。
#include iostream// 必须的头文件#include pthread.h
using namespace std;
#define NUM_THREADS 2
// 线程的运行函数
void* say_hello(void* args){
cout "Hello Runoob!" endl; return 0;
}
int main(){
// 定义线程的 id 变量,多个变量使用数组
pthread_t tids[NUM_THREADS];
for(int i = 0; i NUM_THREADS; ++i)
{
//参数依次是:创建的线程id,线程参数,调用的函数,传入的函数参数
int ret = pthread_create(tids[i], NULL, say_hello, NULL);
if (ret != 0)
{
cout "pthread_create error: error_code=" ret endl;
}
}
//等各个线程退出后,进程才结束,否则进程强制结束了,线程可能还没反应过来;
pthread_exit(NULL);
}
g++ test.cpp -lpthread -o test.o 编译
./test.o执行