文档章节

Linux C Phread 入门1---线程创建

找骨头的啊呜
 找骨头的啊呜
发布于 2014/04/09 09:38
字数 483
阅读 206
收藏 4

首先,我的测试环境是Ubuntu12.04,用的eclispe cdt,当然,你有可以选择采用vim

今天主要讲的线程的创建。

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>//这个是pthread的头文件
void *print_message_function( void *ptr );//函数的预定义,参数类型是由pthread固定的,只能这样。
int main(int argc,char *argv[])
{
pthread_t thread1, thread2;//两个thread
const char *message1 = "Thread 1";
const char *message2 = "Thread 2";
int  iret1, iret2;
/* Create independent threads each of which will execute function */
iret1 = pthread_create( &thread1, NULL, print_message_function, (void*) message1);
iret2 = pthread_create( &thread2, NULL, print_message_function, (void*) message2);
/* Wait till threads are complete before main continues. Unless we  */
/* wait we run the risk of executing an exit which will terminate   */
/* the process and all threads before the threads have completed.   */
pthread_join( thread1, NULL);//join代表主线程等待thread1执行完,再往下走,和java中的join一样
pthread_join( thread2, NULL);
printf("Thread 1 returns: %d\n",iret1);
printf("Thread 2 returns: %d\n",iret2);
return 0;
}
void *print_message_function( void *ptr )
{
char *message;
message = (char *) ptr;
printf("%s \n", message);
return (void *)NULL;
}

关键点:

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

Arguments:

  • thread -返回新建的Thread ID . (unsigned long int defined in bits/pthreadtypes.h)

  • attr -一般设置为NULL,表示没有特殊的属性

  • void * (*start_routine) - 线程实际执行函数的函数指针..方法只有一个类型未void *的指针参数

  • *arg - pointer to argument of function. 想要传递多个参数,只能封装成struct后喂给这个函数


最后说下编译,最简单就是通过gcc命令行进行编译:

gcc -lpthread pthread1.c

Run: ./a.out

Results:

Thread 1
Thread 2
Thread 1 returns: 0
Thread 2 returns: 0


好了,这就是最基本的pthread线程创建过程,当然多线程最重要的还是线程之间的同步和数据交互,下回我再一一阐述。

如果有什么说的不正确的地方,还请各位看官指正。

© 著作权归作者所有

共有 人打赏支持
找骨头的啊呜
粉丝 5
博文 8
码字总数 2861
作品 0
苏州
高级程序员
私信 提问
关于线程的私有存储pthread_key_t

最近在工作中遇到了线程的私有存储的东东,现将对pthreadkeyt的认识与大家分享一下: 熟悉linux线程开发的人都清楚,一个进程中线程直接除了线程自己的栈和寄存器之外,其他几乎都是共享的,...

老叮当猫
2013/06/12
0
0
APUE学习之多线程编程(一):线程的创建和销毁

一、线程标识 和每个进程都有一个进程ID一样,每个线程也有一个线程ID,线程ID是以pthreadt数据类型来表示的,在Linux中,用无符号长整型表示pthreadt,Solaris 把phreadt数据类型表示为无符...

沈小错
2016/08/16
0
0
Linux多线程编程实例解析 【转】

Linux系统下的多线程遵循POSIX线程接口,称为 pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。顺便说一下,Linux 下pthread的实现是通过系统调...

huang19830104
06/28
0
0
LINUX最大线程数及最大进程数

查看最大线程数: cat /proc/sys/kernel/threads-max ulimit User limits - limit the use of system-wide resources. Syntax ulimit [-acdfHlmnpsStuv] [limit] Options -S Change and repo......

偶是小娃
2013/12/11
0
0
linux多线程学习(二)—线程的创建和退出

在上一篇文章中对线程进行了简单的概述,它在系统中和编程的应用中,扮演的角色是不言而喻的。学习它、掌握它、吃透它是作为一个程序员的必须作为。在接下来的讲述中,所有线程的操作都是用户...

长平狐
2012/09/03
89
0

没有更多内容

加载失败,请刷新页面

加载更多

从源码入手,一文带你读懂Spring AOP面向切面编程

之前《零基础带你看Spring源码——IOC控制反转》详细讲了Spring容器的初始化和加载的原理,后面《你真的完全了解Java动态代理吗?看这篇就够了》介绍了下JDK的动态代理。 基于这两者的实现上...

公众号_Zack说码
23分钟前
4
0
maven 常用命令

mvn deploy -Dmaven.test.skip=true mvn source:jar deploy -Dmaven.test.skip=true mvn dependency:tree -Doutput=1.txt...

yzzzzzzzz
24分钟前
2
0
JavaScript之Promise对象

Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了 Promise 对象。 Pr...

前端攻城老湿
25分钟前
5
0
mysql事务,select for update,及数据的一致性处理

在MySQL的InnoDB中,预设的Tansaction isolation level 为REPEATABLE READ(可重读) 在select 的读取锁主要分为两种方式 select .... lock in share mode select ..... for update   这两...

细节探索者
27分钟前
3
0
python 将txt文件转换成excel

emmm,作为一个小白,不会的东西真的太多了,这两天好头大啊!加油坚持吧! #file_affilication = open('Affiliations.txt','r')import xlwtimport os import sysdef txt_xls(...

BellaYu
32分钟前
6
2

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部