Linux C 程序设计多线程基础篇

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux C 程序设计多线程基础篇相关的知识,希望对你有一定的参考价值。

                                 Linux C 程序设计多线程基础篇

题记:因为 Linux 网络入侵检测系统的设计与实现希望使用多线程,因此希望系统的学习一下 Linux C程序设计多线程的知识

注意事项:因为 pthraed 库不是 Linux 系统默认的库,因此在进行多线程开发的时候,需要加上头文件#include <pthread.h>,编译时要加参数 -lpthread;了;gcc thread.c -o thread -lpthread。

进程和线程:

  1. 进程是程序执行,资源分配的基本单位,每个进程都拥有自己的数据段,代码段,堆栈段,在进行进程切换时有比较复杂的上下文切换

  2. 线程是进程独立的一条运行路线,是处理器调度的最小单位,也称为轻量级进程,可以对进程的内存空间,资源进行访问,并与该进程其它线程共享内存空间,代码,资源。

  3. 线程相关的执行状态和存储变量放在线程控制表中,一个进程可以有多个线程,有多个线程控制表及堆栈寄存器,共享一个用户地址空间

技术分享

重要名词:

线程标识:线程 ID,进程 ID 在整个系统中是唯一的,线程 ID,只在所属进程的环境中有效;线程标识使用数据结构 pthread_t 表示;pthread_t 不能作为整数处理,Linux 使用无符号长整形数表示pthread_t.

重要函数:

  1. pthread_self()

函数原型:pthread_t phtread_self(void)

参数:无

返回值:(正在)调用线程的线程 ID

2. pthread_equal()

函数原型:int pthread_equal(pthread_t tidOne,pthread_t tidTwo)

参数:2 个 线程 ID

返回值:相等则返回非 0 值,否则返回 0

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

int main(){
   pthread_t thisId;
   thisId = pthread_self();
   printf("当前线程 ID = %lu.\n",thisId);
   if(pthread_equal(thisId,pthread_self())){
       printf("Yes,equal\n");
   }else{
       printf("No,not equal\n");
}
   return 0;
}

3. 创建线程

  • 调用该线程函数的入口点

  • 使用函数 pthread_create(),创建线程后,就开始运行相关线程函数

函数 pthread_create()

函数原型:int pthread_create(pthread_t *thread,pthread_attr_t *attr,void*(*start_routine)(void *),void *arg);

参数:thread:线程标识;attr 线程属性设置,通常设为 NULL;start_routine:线程函数的起始地址,是一个指向 void 的指针作为参数和返回值的函数指针;arg:传递给 start_runtine 的函数

返回值:成功返回 0,失败返回失败码 

pthread_create(&tid,NULL,thrd_func,NULL)

本文出自 “SuperHakce” 博客,请务必保留此出处http://superhakce.blog.51cto.com/6671637/1899141

以上是关于Linux C 程序设计多线程基础篇的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发 - 多线程实现方案之Pthread篇

多线程(基础篇3)

JAVA SE基础篇54.多线程介绍和创建

并发编程之多线程基础篇及面试

Python Qt GUI设计:多线程中信号与槽的使用(基础篇—9)

linux基础-系统安装教程篇(centos6.5)