pthread_create()函数参数详解和传参的使用

题外话:

用的vscode编译的程序。发现一个问题,就是编译的时候提示没有gcc,但是应该是安装了的。打开命令端,输入gcc -v,提示没有gcc。
因为安装了qt。默认的就有gcc,所以就打开qt的安装路径下C:\Qt\Qt5.12.4\Tools\mingw730_64\bin,路径下文件如下图所示
在这里插入图片描述
然后直接把该路径添加到环境变量,就可以使用gcc 和g++了
贼有意思,gcc也能编译,g++也能编译。
在linux下通过gcc编译c程序,g++编译c++程序,另外就是也没有加-lpthread连接线程库就编译通过了。
sleep函数使用的头文件<unistd.h>也可以编译通过,也就是说,并没有使用windows的库。

在这里插入图片描述


正题:

pthread_create是UNIX环境创建线程函数
头文件  #include<pthread.h>
函数声明   int pthread_create(pthread_t*restrict tidp,const pthread_attr_t
restrict_attr,voidstart_rtn)(void),void *restrict arg);
返回值   若成功则返回0,否则返回出错编号   返回成功时,由tidp指向的内存单元被设置为新创建线程的线程ID。attr参数用于制定各种不同的线程属性。新创建的线程从start_rtn函数的地址开始运行,该函数只有一个万能指针参数arg,如果需要向start_rtn函数传递的参数不止一个,那么需要把这些参数放到一个结构中,然后把这个结构的地址作为arg的参数传入。   linux下用C开发多线程程序,Linux系统下的多线程遵循POSIX线程接口,称为pthread。   由 restrict 修饰的指针是最初唯一对指针所指向的对象进行存取的方法,仅当第二个指针基于第一个时,才能对对象进行存取。对对象的存取都限定于基于由 restrict 修饰的指针表达式中。 由 restrict 修饰的指针主要用于函数形参,或指向由 malloc() 分配的内存空间。restrict 数据类型不改变程序的语义。 编译器能通过作出 restrict 修饰的指针是存取对象的唯一方法的假设,更好地优化某些类型的例程。 参数   第一个参数为指向线程标识符的指针。   第二个参数用来设置线程属性。   第三个参数是线程运行函数的起始地址。   最后一个参数是运行函数的参数。   另外,在编译时注意加上-lpthread参数,以调用静态链接库。因为pthread并非Linux系统的默认库 示例   打印线程 IDs

	#include <pthread.h>
  #include <stdlib.h>
  #include <stdio.h>
  #include <unistd.h>
  #include <string.h>
  pthread_t ntid;
  void printids(const char *s)
  {
   
  pid_t pid;
  pthread_t tid;
  pid = getpid();
  tid = pthread_self();
  printf("%s pid %u tid %u (0x%x)\n", s,
  (unsigned int)pid, (unsigned int)tid, (unsigned int)tid);
  } void *thr_fn(void *arg)
  {
   
  printids("new thread: ");
  return((void *)0);
  }
  int main(void)
  {
   
  int err;
  err = pthread_create(&ntid, NULL, thr_fn,
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值