首页主机资讯Linux下GCC如何进行多线程编程

Linux下GCC如何进行多线程编程

时间2025-12-22 16:15:03发布访客分类主机资讯浏览354
导读:在Linux下使用GCC进行多线程编程,通常涉及以下几个步骤: 编写多线程程序: 使用C语言的POSIX线程库(pthread)来编写多线程程序。以下是一个简单的示例代码: #include <stdio.h> #inclu...

在Linux下使用GCC进行多线程编程,通常涉及以下几个步骤:

  1. 编写多线程程序: 使用C语言的POSIX线程库(pthread)来编写多线程程序。以下是一个简单的示例代码:

    #include <
        stdio.h>
        
    #include <
        stdlib.h>
        
    #include <
        pthread.h>
    
    
    void* thread_function(void* arg) {
        
        int thread_id = *(int*)arg;
        
        printf("Thread %d is running\n", thread_id);
        
        pthread_exit(NULL);
    
    }
    
    
    int main() {
        
        pthread_t threads[5];
        
        int thread_ids[5];
        
    
        for (int i = 0;
         i <
         5;
     i++) {
        
            thread_ids[i] = i;
        
            if (pthread_create(&
        threads[i], NULL, thread_function, (void*)&
    thread_ids[i]) != 0) {
        
                perror("pthread_create");
        
                exit(EXIT_FAILURE);
    
            }
    
        }
        
    
        for (int i = 0;
         i <
         5;
     i++) {
        
            pthread_join(threads[i], NULL);
    
        }
        
    
        printf("All threads have finished\n");
        
        return 0;
    
    }
        
    
  2. 编译多线程程序: 使用GCC编译器编译多线程程序时,需要链接pthread库。可以使用以下命令:

    gcc -o my_program my_program.c -lpthread
    

    其中,-lpthread选项告诉GCC链接pthread库。

  3. 运行程序: 编译成功后,可以运行生成的可执行文件:

    ./my_program
    

常用pthread函数

  • pthread_create:创建一个新线程。

    int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
        
    
  • pthread_join:等待一个线程结束。

    int pthread_join(pthread_t thread, void **retval);
        
    
  • pthread_exit:终止调用线程。

    void pthread_exit(void *retval);
        
    
  • pthread_mutex_initpthread_mutex_destroy:初始化和销毁互斥锁。

    int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);
        
    int pthread_mutex_destroy(pthread_mutex_t *mutex);
        
    
  • pthread_mutex_lockpthread_mutex_unlock:加锁和解锁互斥锁。

    int pthread_mutex_lock(pthread_mutex_t *mutex);
        
    int pthread_mutex_unlock(pthread_mutex_t *mutex);
        
    

示例:使用互斥锁保护共享资源

#include <
    stdio.h>
    
#include <
    stdlib.h>
    
#include <
    pthread.h>
    

#define NUM_THREADS 5

int shared_resource = 0;
    
pthread_mutex_t mutex;


void* increment_resource(void* arg) {
    
    for (int i = 0;
     i <
     100000;
 i++) {
    
        pthread_mutex_lock(&
    mutex);
    
        shared_resource++;
    
        pthread_mutex_unlock(&
    mutex);

    }
    
    return NULL;

}


int main() {
    
    pthread_t threads[NUM_THREADS];
    

    pthread_mutex_init(&
    mutex, NULL);
    

    for (int i = 0;
     i <
     NUM_THREADS;
 i++) {
    
        if (pthread_create(&
threads[i], NULL, increment_resource, NULL) != 0) {
    
            perror("pthread_create");
    
            exit(EXIT_FAILURE);

        }

    }
    

    for (int i = 0;
     i <
     NUM_THREADS;
 i++) {
    
        pthread_join(threads[i], NULL);

    }
    

    printf("Final value of shared_resource: %d\n", shared_resource);
    

    pthread_mutex_destroy(&
    mutex);
    

    return 0;

}
    

在这个示例中,多个线程并发地增加一个共享资源shared_resource,使用互斥锁mutex来保护对共享资源的访问,确保每次只有一个线程可以修改它。

通过这些步骤和示例,你可以在Linux下使用GCC进行多线程编程。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Linux下GCC如何进行多线程编程
本文地址: https://pptw.com/jishu/777482.html
GCC在Linux系统中的版本管理技巧 Ubuntu为何口碑不佳

游客 回复需填写必要信息