线程管理
来源:互联网 发布:新浪财经数据价格 编辑:程序博客网 时间:2024/06/05 11:23
线程的概念
线程是进程内部的一条执行序列(执行流),每个进程至少有一条执行序列:main 执行体。
进程可以通过线程创建 N 条线程,这些新创建的线程称之为函数线程,main 函数所代表的线程为主线程。
线程与进程的区别
1. 进程是资源分配的最小单位,线程是 CPU 调度的最小单位
2. 线程是轻量级的进程
3. 管理方式不同,进程是 PCB 管理,线程是由线程结构管理
线程的三种实现方式
1. 用户级(n : 1)
2. 内核级(n : n)
3. 混合模式(n : m)
线程的相关操作
线程的创建:(线程库文件的使用)pthread
int pthread_create(pyhread_t *id, pthread_attr_t *attr, void *(*fun)(void *), void *arg);
利用这个函数创建一个函数线程
包含线程创建函数的源代码想要生成可执行文件,链接时必须:
gcc -o pthread pyhread.c -lpyhread
创建出来的函数线程不同于函数调用,函数调用是这条执行流中的一部分。
函数线程是创出一条独立的执行序列,它与主线程同时执行。
线程结束:int pthread_exit(void *); 参数可以设置线程结束状态
等待线程结束:int pthread_join(pthread_t id, void **);
可以获取到等待的线程通过 pthread_exit 设置的结束状态信息
线程函数传参:
(1)将值强转成 void * int a = (int)arg;
(2)将地址强转成 void * int a = *(int *)arg;
练习:创建函数线程,主线程完成对数组元素的排序,函数线程完成打印 100 以内所有的素数。
代码如下:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <assert.h>#include <pthread.h>void BubbleSort(int *arr, int len){int tmp;for (int i=0; i<len; i++){for (int j=i+1; j<len-1-i; j++){if (arr[i] > arr[j]){tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}}}printf("\n");}void *pthread_fun(void *arg){int i;int j;for (i=2; i<=100; i++){for (j=i-1; j>=2; j--){if (i%j == 0){break;}}}printf("\n");pthread_exit("hello world\n");}void main(){int arr[10] = {1,3,5,3,4,9,96,4,78,56};pthread_t id;int res = pthread_create(&id, NULL, pthread_fun, NULL);BubbleSort(arr, 10);void *buffer = NULL;pthread_join(id, &buffer);printf("%s\n", (char *)buffer);pthread_exit(NULL);}
测试运行结果如下:
阅读全文
0 0
- 线程管理
- 线程管理
- 线程管理
- 线程管理
- 线程管理
- 线程管理
- 线程管理
- 线程管理
- 线程管理
- 线程管理
- 管理线程的线程池
- 管理线程之创建线程
- 管理线程之创建线程
- 【高级线程管理】线程池
- java线程状态管理
- Linux 进程管理--------------------线程
- Win2Linux 线程管理映射
- ACE_Thread_Manager线程管理学习
- GOJ 1096
- POJ 1731 Orders
- ES 和influxdb那些事
- 关于hovers
- 数据库三大范式详解
- 线程管理
- hdu 3507 Print Article
- Java 数据结构_线性表
- java中的垃圾回收机制及内存泄漏的现象
- python基础(基础语法)
- python运行脚本参数-m
- 编程技巧总结
- docker常用操作
- JAVA面向对象————封装