欢迎光临
我们一直在努力

c多线程编程实例 linux

在Linux环境下,C语言的多线程编程是一项非常实用的技术,它允许程序同时执行多个任务,提高了程序的效率和响应速度,下面将通过一个具体的实例来详细展示如何在Linux下进行C语言的多线程编程。

实例:创建两个线程实现对一个数的递加

1、代码实现

需要包含必要的头文件,并定义一些全局变量和宏:

     #include <pthread.h>
     #include <stdio.h>
     #include <sys/time.h>
     #include <string.h>
     #define MAX 10

定义两个线程函数thread1thread2,它们都对全局变量number进行递增操作,并在每次递增后打印当前的值:

     void *thread1() {
         printf("thread1 : I'm thread 1
");
         for (int i = 0; i < MAX; i++) {
             printf("thread1 : number = %d
", number);
             pthread_mutex_lock(&mut);
             number++;
             pthread_mutex_unlock(&mut);
             sleep(2);
         }
         printf("thread1 :主函数在等我完成任务吗?
");
         pthread_exit(NULL);
     }
     void *thread2() {
         printf("thread2 : I'm thread 2
");
         for (int i = 0; i < MAX; i++) {
             printf("thread2 : number = %d
", number);
             pthread_mutex_lock(&mut);
             number++;
             pthread_mutex_unlock(&mut);
             sleep(3);
         }
         printf("thread2 :主函数在等我完成任务吗?
");
         pthread_exit(NULL);
     }

定义thread_create函数来创建这两个线程,并检查线程是否成功创建:

     void thread_create(void) {
         int temp;
         memset(&thread, 0, sizeof(thread));
         if ((temp = pthread_create(&thread[0], NULL, thread1, NULL)) != 0)
             printf("线程1创建失败!
");
         else
             printf("线程1被创建
");
         if ((temp = pthread_create(&thread[1], NULL, thread2, NULL)) != 0)
             printf("线程2创建失败
");
         else
             printf("线程2被创建
");
     }

定义thread_wait函数来等待这两个线程结束,并打印相应的信息:

     void thread_wait(void) {
         if (thread[0] != 0) {
             pthread_join(thread[0], NULL);
             printf("线程1已经结束
");
         }
         if (thread[1] != 0) {
             pthread_join(thread[1], NULL);
             printf("线程2已经结束
");
         }
     }

main函数中初始化互斥锁,调用thread_create创建线程,然后调用thread_wait等待线程结束:

     int main() {
         pthread_mutex_init(&mut, NULL);
         printf("我是主函数哦,我正在创建线程,呵呵
");
         thread_create();
         printf("我是主函数哦,我正在等待线程完成任务阿,呵呵
");
         thread_wait();
         return 0;
     }

2、编译运行:将上述代码保存为thread_example.c,然后在终端中使用以下命令进行编译和运行:

   gcc -lpthread -o thread_example thread_example.c
   ./thread_example

运行结果将显示两个线程交替递增number的值,并在每个线程结束时打印相应的信息。

FAQs

1、问:为什么在递增number时需要使用互斥锁?

答:在多线程编程中,多个线程可能会同时访问和修改共享资源(如本例中的number变量),这可能导致数据竞争和不一致的问题,互斥锁(Mutex)是一种同步机制,它可以确保在同一时刻只有一个线程能够访问共享资源,从而避免数据竞争和保证数据的一致性。

2、问:如何确定线程是否成功创建?

答:在创建线程时,pthread_create函数会返回一个整数值,如果返回值为0,则表示线程成功创建;如果返回值不为0,则表示线程创建失败,可以通过检查pthread_create的返回值来确定线程是否成功创建。

赞(0) 打赏
未经允许不得转载:九八云安全 » c多线程编程实例 linux

评论 抢沙发