线程编程

简介: 线程编程

先看示例:

#include <pthread.h>
#include <stdio.h>
#define errlog(errmsg)                                                \
    do {                                                              \
        perror(errmsg);                                               \
        printf("--%s--%s--%d--\n", __FILE__, __FUNCTION__, __LINE__); \
        return -1;                                                    \
    } while (0)
void *thread1_handler(void *arg) {
    int count = *((int *)arg);
    while (count > 0) {
        printf("thread1...\n");
        sleep(1);
        count--;
    }
    pthread_exit("thread1...exit");
}
void *thread2_handler(void *arg) {
    int count = *((int *)arg);
    while (count > 0) {
        printf("thread2...\n");
        sleep(1);
        count--;
    }
    pthread_exit("thread2...exit");
}
int main(int argc, const char *argv[]) {
    pthread_t thread1, thread2;
    int arg1 = 2;
    int arg2 = 5;
    void *retval;
    if (pthread_create(&thread1, NULL, thread1_handler, (void *)&arg1) != 0) {
        errlog("pthread_create1 error");
    }
    if (pthread_create(&thread2, NULL, thread2_handler, (void *)&arg2) != 0) {
        errlog("pthread_create2 error");
    }
    pthread_join(thread1, &retval);
    printf("%s\n", (char *)retval);
    pthread_join(thread2, &retval);
    printf("%s\n", (char *)retval);
    return 0;
}点击复制复制失败已复制


上述代码中, thread1_handlerthread2_handler 分别为两个线程的执行代码,当两个线程任务执行结束之后,进行资源回收,并得到线程退出时的状态值并输出显示。


编译并运行,结果如下所示:

$ gcc main.c -lpthread && ./a.out 
thread1...
thread2...
thread1...
thread2...
thread2...
thread1...exit
thread2...
thread2...
thread2...exit点击复制复制失败已复制


由运行结果可以看出,两个线程分别向终端输出是并发执行的,注意输出先后是不固定的,只是在本次运行时, thread1 先输出(原书中可是 thread2 先输出的)。同时,也可以看出线程执行函数与封装子函数的区别。如果将线程函数想象成一个在主函数中封装的子函数,那么子函数必然会按照代码的顺序依次执行,即执行完 thread1 再执行 thread2

目录
相关文章
|
3天前
|
安全 Java 调度
Java编程时多线程操作单核服务器可以不加锁吗?
Java编程时多线程操作单核服务器可以不加锁吗?
16 2
|
8天前
|
Java 调度 开发者
Java中的多线程编程:从基础到实践
本文旨在深入探讨Java多线程编程的核心概念和实际应用,通过浅显易懂的语言解释多线程的基本原理,并结合实例展示如何在Java中创建、控制和管理线程。我们将从简单的线程创建开始,逐步深入到线程同步、通信以及死锁问题的解决方案,最终通过具体的代码示例来加深理解。无论您是Java初学者还是希望提升多线程编程技能的开发者,本文都将为您提供有价值的见解和实用的技巧。
15 2
|
10天前
|
Java 数据处理
Java中的多线程编程:从基础到实践
本文旨在深入探讨Java中的多线程编程,涵盖其基本概念、创建方法、同步机制及实际应用。通过对多线程基础知识的介绍和具体示例的演示,希望帮助读者更好地理解和应用Java多线程编程,提高程序的效率和性能。
18 1
|
14天前
|
Java
深入理解Java中的多线程编程
本文将探讨Java多线程编程的核心概念和技术,包括线程的创建与管理、同步机制以及并发工具类的应用。我们将通过实例分析,帮助读者更好地理解和应用Java多线程编程,提高程序的性能和响应能力。
19 4
|
22天前
|
Java 调度 开发者
Java并发编程:深入理解线程池
在Java的世界中,线程池是提升应用性能、实现高效并发处理的关键工具。本文将深入浅出地介绍线程池的核心概念、工作原理以及如何在实际应用中有效利用线程池来优化资源管理和任务调度。通过本文的学习,读者能够掌握线程池的基本使用技巧,并理解其背后的设计哲学。
|
13天前
|
安全 Java 调度
Java 并发编程中的线程安全和性能优化
本文将深入探讨Java并发编程中的关键概念,包括线程安全、同步机制以及性能优化。我们将从基础入手,逐步解析高级技术,并通过实例展示如何在实际开发中应用这些知识。阅读完本文后,读者将对如何在多线程环境中编写高效且安全的Java代码有一个全面的了解。
|
23天前
|
API Python
探索Python中的多线程编程
探索Python中的多线程编程
38 5
|
23天前
|
算法 Java 数据处理
Java并发编程:解锁多线程的力量
在Java的世界里,掌握并发编程是提升应用性能和响应能力的关键。本文将深入浅出地探讨如何利用Java的多线程特性来优化程序执行效率,从基础的线程创建到高级的并发工具类使用,带领读者一步步解锁Java并发编程的奥秘。你将学习到如何避免常见的并发陷阱,并实际应用这些知识来解决现实世界的问题。让我们一起开启高效编码的旅程吧!
|
3天前
|
Java
COMATE插件实现使用线程池高级并发模型简化多线程编程
本文介绍了COMATE插件的使用,该插件通过线程池实现高级并发模型,简化了多线程编程的过程,并提供了生成结果和代码参考。
|
25天前
|
Java 开发者
Java中的多线程编程基础与实战
【9月更文挑战第6天】本文将通过深入浅出的方式,带领读者了解并掌握Java中的多线程编程。我们将从基础概念出发,逐步深入到代码实践,最后探讨多线程在实际应用中的优势和注意事项。无论你是初学者还是有一定经验的开发者,这篇文章都能让你对Java多线程有更全面的认识。
22 1

相关实验场景

更多