线程管理

来源:互联网 发布:新浪财经数据价格 编辑:程序博客网 时间: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);}
测试运行结果如下:

原创粉丝点击