线程管理

线程的概念
       线程是进程内部的一条执行序列(执行流),每个进程至少有一条执行序列: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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值