线程函數

一个进程的所有信息对该进程的的所有线程都是共享的, 包括可执行程序的代码, 程序的全局内存和堆内存, 栈以及文件描述符.
所以, 多个线程自动的可以访问相同的存储地址空间和文件描述符
但是, 新的线程会清除原线程的信号集

每个线程的ID也是有意义的, 但是仅在它所属的进程上下文才有意义.


pthread_equal 函數
#include <pthread.h>

// 比较两个线程ID是否相等
// 线程 ID 不一定是一个非负整数,也有可能是一个结构体。所以,要对比两个线程是否相同,必须使用pthread_equal 函数来进行.
int pthread_equal(pthread_t tidl, pthread_t tid2)

  • 相等, 返回 !0;
  • 不相等, 返回 0.

pthread_self 函數
#include <pthread.h>

// 返回线程的ID
pthread_t pthread_self(void)

pthread_create 函數

每个线程只能做被安排了的作业.

#include <pthread.h>

int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg)

成功, 返回 0;
失败, 返回错误编码

参数 :

  • tidp : 指向新线程ID的内存单元
  • attr : 定制不同属性的线程. (attr = NULL, 默认属性)
  • start_rtn : 线程执行的函数
  • arg : 函数传入的参数. (arg = NULL, 不传入参数)
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <errno.h>
#include <string.h>

void print_id(const char *s)
{
	pthread_t tid;
	pid_t pid;

	pid = getpid();
	tid = pthread_self();

	printf("%s pid = %d, tip = %lu\n", s, pid, (unsigned long)tid);
}

void *thread_print(void *)
{
	print_id("new thread :");

	return ((void *)0);
}

int main(void)
{
	pthread_t tid;

	errno = pthread_create(&tid, NULL, thread_print, NULL);
	if(errno != 0)
		fprintf(stderr, "%s", strerror(errno));
	
	// 主程序沉睡 1s, 不让两个程序混乱
	sleep(1);
	print_id("main thread :");

	exit(0);
}

运行结果

// 注意的时候, gcc 后面要加上 -pthread, 如 : gcc -pthread 文件名.cpp
[root@localhost Pthread]# gcc create_2_创建线程.cpp -pthread
[root@localhost Pthread]# ./a.out 
new thread : pid = 19673, tip = 140307662010112
main thread : pid = 19673, tip = 140307670284096

小结

  • 掌握 pthread_create 函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值