浅尝辄止29-Linux线程-睡眠排序法

一件事可以分身来做哪有多爽,今天浅尝多线程。
例子参考写完这个排序算法,老板就叫我滚蛋…

手册

条目 内容
pthreads(7) 线程知识
pthread_create(3) 创建线程
pthread_join(3) 等待线程结束
pthread_cancel(3) 通知线程结束

浅尝

有了多进程为什么还要有多线程?那是因为多进程是一个重量级的动作,fork出来的进程会在某一时刻将父进程的一些资源复制给子进程,一方面需要空间,另一方面进程的管理需要内核管理,总之是代价多多。线程就轻量级多了,不需要额外那么多空间,多线程管理也主要在用户层。

代码演示

参考文章是java代码,我用C写了一下。

#include 
#include 
#include 
#include 
#include 

static void* thread_func(void *arg){
    usleep(*(int *)arg);
    printf("%d\n", *(int *)arg);
}

int main()
{
    int ret = -1;
    int nums[] = {11, 3, 998, 5455, 1, 152, 990};
    pthread_t tid[sizeof(nums)/sizeof(int)];
    int i;
    for (i = 0; i < sizeof(nums)/sizeof(int); ++i){
        ret = pthread_create(&tid[i], NULL, thread_func, &nums[i]);
        //出错处理
        if (ret){
            printf("No.%d error:%s\n", i, strerror(ret));
            while (i > 0){
                pthread_cancel(tid[i - 1]);
                pthread_join(tid[i - 1], NULL);
                --i;
            }
            exit(EXIT_FAILURE);
        }
    }
    //等待所有线程结束后,退出主线程
    for (i = 0; i < sizeof(nums)/sizeof(int); ++i){
        pthread_join(tid[i], NULL);
    }
    return 0;
}

输出

1
3
11
152
990
998
5455

你可能感兴趣的:(浅尝辄止29-Linux线程-睡眠排序法)