C++ POSIX Linux 多线程

1 篇文章 0 订阅
1 篇文章 0 订阅

(●’◡’●) 呀!你来啦!!

因为笔者是在Linux环境开发的,所以在Windows上不支持,于是百度到了一个可在Vusual Studio开发的👇
点点这里下载哦
如果下载慢或被 ** 墙了,请你打开迅雷
ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip(这是FTP地址)
你可能遇到问题(如果你遇到的问题为TRUE,方便在这里解决,免去度娘怂索):

如果你遇到C2011 “timespec”:“struct”类型重定义你需要转到定义去把timespec结构体注释掉,因为这个头文件已经包含了"time.h",然而time.h已经定义了这个结构。

如果你遇到这个头文件的函数error LNK2019: 无法解析的外部符号 __imp__pthread_create,函数 _main 中引用了该符号
你需要

#pragma comment(lib,"x86/pthreadVC2.lib")

#pragma comment(lib,"pthreadVC2.lib")

或者项目属性->链接器->输入->附加依赖项,添加pthreadVC2.lib

线程是一个多任务形式,就是说它允许让计算机 同时运行 多个的程序。


一般有两种类型的多线程处理:基于程、基于线

我觉得基于进程程序就一个主线程,所有的代码就在这一个线程里每行执行。
原话:基于进程的多线程处理是程序的并发执行。

我觉得基于线程一个进程有多个线程,每个线程同时运行。
原话:基于线程的多线程处理是同一程序的片段的并发执行。

我使用的是Ubuntu系统,在此用 POSIX 编写多线程程序
POSIX 全称是 可移植操作系统接口,它可以跨系统哦

不信你康康这里(●’◡’●)点我点我


包含头文件

包含头文件沙子都会哈,不然在目曙这线程哩!
这个头文件名不是thread哈,本文用的pthread.h,要给它加上一个小 (o゚v゚)ノp

#include <pthread.h>

创建线程

创建线程用这个函数👇👇👇

int pthread_create (
	pthread_t * thread,
	const pthread_attr_t * attr,
	void *(PTW32_CDECL * start_routine) (void *),
	void *arg);

参数好多啊,才三个,我们来介绍一下这些参数是啥东东吧👇

参数描述
thread它是一个指向线程标识符指针
attr一个不透明的属性对象,可以被用来设置线程属性
start_routine线程运行函数起始地址,一旦线程被创建就会执行
arg运行的参数。它必须通过把引用作为指针强制转换为 void 类型进行传递。

它的返回值是int,返回的是线程是否创建成功,如果成功返回0,返回非0表示线程创建失败

如果你不想使用attr参数可以默认传递NULL
如果arg没有传递参数,也可以使用NULL


终止线程
pthread_exit (void *value_ptr);

上面的那个pthread_exit这个函数,它主要用于终止某一个线程


例子
#include <iostream>
#include <pthread.h>
using namespace std;
#define THREAD_NUM 5

//线程运行调用
void* test(void* args)
{
	cout << "Hello Runoob!" << endl;
	return 0;
}

int main()
{
	pthread_t *t[THREAD_NUM];
	for (int i = 0; i < THREAD_NUM; ++i)
	{
		int retVal = pthread_create(t[i], NULL, test, NULL);
		if (retVal != 0)
		{
			cout << "create_err --- code_"<< retVal << " ThreadIndex_" << i << endl;
		}
	}
	pthread_exit(NULL);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值