Linux下多线程编程简介(一)

简介:
   最近在做移植,碰到了关于多线程操作方面的内容。由于之前没有太多的在Linux下面进行程序设计,所以得先从基础学起。下面先讲讲Linux下多线程编程的一些简单设计,完后将我移植中关于这一部分的情况介绍一下。
         在LINUX中,一般pthread线程库是一套通用的线程库,是由POSIX提出的,因此他的移植性是非常好的。
      创建线程实际上就是确定调用该线程函数的入口点,这里通常使用的函数是pthread_create。在线程创建之后,就开始运行相关的线程函数。在该函数运行结束,线程也会随着退出。这是其中退出线程的一种方法,另外一种退出线程的方法就是调用pthread_exit()函数接口,这是结束函数的主动行为。在这里要注意的是,在使用线程函数时,不要轻易调用exit()函数,因为这样会使整个进程退出,往往一个进程包含着多个线程,所以调用了exit()之后,所有该进程中的线程都会被结束掉。因此,在线程中,利用pthread_exit来替代进程中的exit。
      由于一个进程中的数据段是共享的,因此通常在线程退出之后,退出线程所占的资源并不会随着线程的结束而得到释放。正如进程之间可以调用wait()函数来同步终止并释放资源一样,线程之间也有类似的机制,那就是pthread_join函数.pthread_join可以将当前线程挂起,等待线程的结束,这个函数是一个阻塞函数,调用它的函数将一直等待到被等待的线程结束为止,当函数返回时,被等待函数的资源就会被释放。
 
       pthread_create
       函数原型:      int pthread_create (pthread_t* thread, pthread_attr_t*
                                                attr,  void* (start_routine)(void*), void* arg);
       pthread_exit
       函数原型:    void pthread_exit (void*  retval);
       phread_join
       函数原型:   int pthread_join (pthread_t thread, void** thread_return);
 
以上函数的头文件均为:      pthread.h
 
 
下面为实例:
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <errno.h>
void *pthread_function1(void *arg);
void *pthread_function2(void *arg);

int main (int argc, char** argv) {
 pthread_t pt_1 = 0;
 pthread_t pt_2 = 0;
 int ret = 0;
 char message[] = "hello!";
 
 ret = pthread_create(&pt_1, NULL, pthread_function1, (void *)message);
 if(0 != ret) {
  perror("pthread1 creation failed!"); 
 }
 
 ret = pthread_create(&pt_2, NULL, pthread_function2, (void *)message);
 if(0 != ret) {
  perror("pthread2 creation failed!"); 
 }
 pthread_join(pt_1, NULL);
 pthread_join(pt_2, NULL);
 
 return 0;
}
void *pthread_function1(void *arg) {
 printf("This is thread1, %s\n", (char*)arg);
 
 sleep(3);
 pthread_exit("Thank you for using thread1");
}
void *pthread_function2(void *arg) {
 printf("This is thread2, %s\n", (char*)arg);
 
 sleep(3);
 pthread_exit("Thank you for using thread2");
}
 

本文转自jazka 51CTO博客,原文链接:http://blog.51cto.com/jazka/233969,如需转载请自行联系原作者
相关文章
|
1天前
|
Unix Linux 调度
linux线程与进程的区别及线程的优势
linux线程与进程的区别及线程的优势
|
2天前
|
存储 算法 Linux
【Linux】线程的内核级理解&&详谈页表以及虚拟地址到物理地址之间的转化
【Linux】线程的内核级理解&&详谈页表以及虚拟地址到物理地址之间的转化
|
5天前
|
算法 Java Linux
【探索Linux】P.23(线程池 —— 简单模拟)
【探索Linux】P.23(线程池 —— 简单模拟)
9 0
|
5天前
|
存储 安全 Java
【探索Linux】P.21(多线程 | 线程同步 | 条件变量 | 线程安全)
【探索Linux】P.21(多线程 | 线程同步 | 条件变量 | 线程安全)
10 0
|
5天前
|
算法 安全 Linux
【探索Linux】P.20(多线程 | 线程互斥 | 互斥锁 | 死锁 | 资源饥饿)
【探索Linux】P.20(多线程 | 线程互斥 | 互斥锁 | 死锁 | 资源饥饿)
11 0
|
5天前
|
存储 安全 Linux
【探索Linux】P.19(多线程 | 线程的概念 | 线程控制 | 分离线程)
【探索Linux】P.19(多线程 | 线程的概念 | 线程控制 | 分离线程)
7 0
|
13天前
|
Unix 大数据 Linux
Linux系统简介与开源精神
Linux系统简介与开源精神
29 3
|
19天前
|
存储 缓存 Java
【linux线程(四)】初识线程池&手撕线程池
【linux线程(四)】初识线程池&手撕线程池
|
19天前
|
Java Linux
【linux线程(三)】生产者消费者模型详解(多版本)
【linux线程(三)】生产者消费者模型详解(多版本)