Linux下C语言开发-多线程开发

文章目录

上一篇博客我们介绍了多进程编程,本篇来介绍下多线程编程。多线程和多进程还是有很多区别的。其中之一就是,多进程是linux内核本身所支持的,而多线程则需要相应的动态库进行支持。对于进程而言,数据之间都是相互隔离的,而多线程则不同,不同的线程除了堆栈空间之外所有的数据都是共享的。

多线程的创建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <stdio.h>  
#include <pthread.h>  
#include <unistd.h>  
#include <stdlib.h>  
 
void func_1(void* args)  
{  
    while(1) {  
        sleep(1);  
        printf("this is func_1!\n");  
    }  
}  
 
void func_2(void* args)  
{  
    while(1) {  
        sleep(2);  
        printf("this is func_2!\n");  
    }  
}  
 
int main()  
{  
    pthread_t pid1, pid2;  
 
    if(pthread_create(&pid1, NULL, func_1, NULL)) {  
        return -1;  
    }  
 
    if(pthread_create(&pid2, NULL, func_2, NULL)) {  
        return -1;  
    }  
 
    while(1) {  
        sleep(3);  
    }  
 
    return 0;  
}

编译的时候需要链接相应的动态库,运行gcc thread.c -o thread -lpthread即可进行编译。

线程的等待

和多进程一样,多线程也有自己的等待函数。这个等待函数就是pthread_join函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>  
#include <pthread.h>  
#include <unistd.h>  
#include <stdlib.h>  
 
void func(void* args)  
{  
    sleep(2);  
    printf("this is func!\n");  
}  
 
int main()  
{  
    pthread_t pid;  
 
    if(pthread_create(&pid, NULL, func, NULL)) {  
        return -1;  
    }  
 
    pthread_join(pid, NULL);  
    printf("this is end of main!\n");  
 
    return 0;  
}

输入gcc wait.c -o wait -lpthread即可进行编译。

线程的互斥

对于编写多线程的朋友来说,线程互斥是少不了的。在linux下面,编写多线程常用的工具其实是pthread_mutex_t。本质上来说,它和Windows下面的mutex其实是一样的,差别几乎是没有。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <stdio.h>  
#include <pthread.h>  
#include <unistd.h>  
#include <stdlib.h>  
 
static int value = 0;  
pthread_mutex_t mutex;  
 
void func(void* args)  
{  
    while(1) {  
        pthread_mutex_lock(&mutex);  
        sleep(1);  
        value ++;  
        printf("value = %d!\n", value);  
        pthread_mutex_unlock(&mutex);  
    }  
}  
 
int main()  
{  
    pthread_t pid1, pid2;  
    pthread_mutex_init(&mutex, NULL);  
 
    if(pthread_create(&pid1, NULL, func, NULL)) {  
        return -1;  
    }  
 
    if(pthread_create(&pid2, NULL, func, NULL)) {  
        return -1;  
    }  
 
    while(1) {  
        sleep(0);
    }  
 
    return 0;  
}

输入gcc mutex.c -o mutex -lpthread即可进行编译。

参考文章:
linux下的C语言开发(多线程编程)
linux下的C语言开发(线程等待)
linux下的C语言开发(线程互斥)



本文出自 TENNFY WU,转载时请注明出处及相应链接。

本文永久链接: http://www.tennfy.com/4730.html

下一篇文章:

上一篇文章:

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

1 + 1 = ?


您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

返回顶部