[原创]手把手教你Linux下的多线程设计--Linux下多线程编程详解(一)

news/2024/11/9 3:03:19 标签: 多线程, linux, 编程, thread, null, gcc

本文可任意转载,但必须注明作者和出处。
【原创】手把手教你Linux下的多线程设计(一)
                                      --Linux下多线程编程详解
原创作者:Frozen_socker(冰棍)  
 E_mail:
dlskyfly@163.com       
 线程也被称为轻权进程(lightweight process)。
 
  在传统的UNIX上,一个进程让另一个实体做某个事务是用fork派生子进程的方法处理的。派生子进程的代价比线程要昂贵得多,尤其是在父子进程之间、子进程之间传递信息需要用IPC或其他方法通信。相对比,使用线程有许多优点,如创建线程要比创建进程快的多、一个进程中的线程共享相同的全局存储区等等。
 
   Linux系统下的多线程遵循POSIX线程接口,称为pthread,在Linux中,多线程需要使用的头文件为<pthread.h>,连接时需要使用库为libpthread.a。
 
 
 
我们编写一个非常简单的例子:
 
//example_1.c
#include <stdio.h>
#include <pthread.h>
 
void * pthread_func_test(void * arg);
 
int main()
...{
     pthread_t pt1,pt2;
     pthread_create(&pt1,NULL,pthread_func_test,"This is the Thread_ONE");
     pthread_create(&pt2,NULL,pthread_func_test,"This is the Thread_TWO");
     sleep(1);              //不加上这句,看不到结果。
}
void * pthread_func_test(void * arg)
...{
     printf("%s /n ",arg);
}
 
 
 
编译源文件:
gcc example_1.c -o example -lpthread
 
 
编译环境:
平   台:FC6
版   本:2.6.18-1.2798.fc6
编译器:gcc 4.1.1 20070105 (Red Hat 4.1.1-51)
 
 
 
 
运行可执行文件:
./example
 
 
 
在终端上的输出结果:
This is the Thread_ONE
This is the Thread_TWO
 
 
  在example_1这个例子中,一共产生了三个线程,第一个就是main所代表的主线程,另外两个就是pt1和pt2分别代表的两个分支线程,这两个线程由pthread_create函数创建,执行的内容就是写在函数pthread_func_test里的东东。
上例涉及到的函数是:pthread_create()
函数原型如下:
int pthread_create(pthread_t *restrict thread,
           const pthread_attr_t *restrict attr,
           void *(*start_routine)(void*), void *restrict arg);
 
 
参数点解:
1、每个线程都有自己的ID即thread ID,可以简称tid,呵呵,是不是想起什么来了?。。。对,和pid有点象。其类型为pthread_t,pthread_t在头文件/usr/include/bits/pthreadtypes.h中定义:
         typedef unsigned long int pthread_t;
         可以看成是线程的标志符。当成功创建一个新线程的时候,系统会为该线程分配一个tid,并将该值通过指针返回给调用它的程序。
2、attr申明线程的属性。                       
     属性结构为pthread_attr_t,它在头文件/usr/include/pthread.h中定义。设为NULL,表示在这里我们只使用线程的默认属性就可以了。
    
3、start_routine表示新创建的线程所要执行的例程。线程以调用该函数开始,直到由该函数返回(return)终止这个线程,或者在start_routine所指向的函数中调用pthread_exit函数终止。start_routine只有一个参数,该参数由随后的arg指针来指出。
 
4、arg:也是一个指针,也就是start_routine指针所指向的函数的参数。
 
 
 
返回值:
  当pthread_create调用成功时,该调用返回0;否则,返回一个错误代码指出错误的类型。

       欢迎您发邮件与我交流,但因为工作和时间的关系,我有权对您提出的一些问题不予回答,敬请见谅。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Frozen_fish/archive/2007/07/05/1679491.aspx


http://www.niftyadmin.cn/n/1748397.html

相关文章

zabbix数据库需要多大硬盘?我告诉你

本次案例&#xff1a;100台服务器&#xff0c;每台服务器有30个监控项&#xff0c;每个监控项60秒刷新一次&#xff0c;需要多大的硬盘呢&#xff1f;众所周知&#xff0c;zabbix基本都是通过web配置&#xff0c;这些配置数据也是存放到数据库里的&#xff0c;但是它对硬盘容量…

ARM-LINUX交叉编译链制作

ARM Linux 交叉编译 工具链 制作攻略2007-06-25 20:040、制作之前确保你的机子上有如下几个工具&#xff1a;bison flex build-essential。 build-essential 主要是用于提供GCC、GLIBC等必要的编译资源&#xff0c;一般做开发的人员机子上应该都会有的。…

域名解析系统DNS诊断命令nslookup详解【转】

转自&#xff1a;http://www.renhaibo.com/archives/29.html Ping指令我们很熟悉了&#xff0c;它是一个检查网络状况的命令&#xff0c;在输入的参数是域名的情况下会通过DNS进行查询&#xff0c;但只能查询A记录和CNAME&#xff08;别名&#xff09;记录&#xff0c;还会返回…

linux根文件系统与initrd

linux根文件系统与initrd 收藏 1 根文件系统 简单来说&#xff0c;&#xff08;根文件系统&#xff09;就是系统第一个mount的文件系统 Filesystem Handling Like every traditional Unix system, Linux makes use of a system s root filesystem : …

sticky footer布局,定位底部footer

其作用就是当内容区域比较少时&#xff0c;让footer也能正常定位到底部&#xff0c;以前我们使用js来达到这种效果&#xff0c;其实用css也是完全可以的 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title&g…

制作一个简单的文件系统

三.制作一个简单的文件系统 0 BusyBox简介 什么是Busybox呢&#xff1f; 从名字上直接理解&#xff0c;Busybox是一个“繁忙的盒子”&#xff0c;其实&#xff0c;Busybox可以理解为一个Linux的命令集合&#xff0c;我们在进行Linux操作时所需要的常用命令&#xff0c;都…

linux 6.x crontab 定时任务使用

2019独角兽企业重金招聘Python工程师标准>>> 安装crontab&#xff1a; yum install crontabs 服务操作说明&#xff1a; /sbin/service crond start //启动服务/sbin/service crond stop //关闭服务/sbin/service crond restart //重启服务/sbin/service crond relo…

u-boot启动过程分析

从源代码看系统启动过程 为什么要分析源代码&#xff1f;分析优秀的源代码本身就是一个学习的过程&#xff0c;也是进行深入研究的必经之路。不过在此我们的主要目的并非要研究U-boot或Bootloader技术本身&#xff0c;而仅仅是为了成功的并且恰当的将U-Boot移植到我们的开发板…