详解Linux线程
发布日期:2021-05-07 22:56:06 浏览次数:28 分类:精选文章

本文共 2251 字,大约阅读时间需要 7 分钟。

Linux 线程与进程概念解析

操作系统中的线程和进程是计算机执行任务的核心概念。线程是操作系统调度的最小单位,而进程则是资源分配的最小单位。理解这两者的区别对于编程和系统管理都至关重要。

线程与进程的关系

  • 线程:操作系统调度的最小单位。一个进程至少有一个线程,负责执行任务。多个线程可以共享一个进程的资源,减少系统开销。
  • 进程:资源分配的基本单位。创建进程时,操作系统需要为其分配物理地址和创建页表等,这使得进程的创建开销较大。

创建线程

在Linux系统中,创建线程的函数是 pthread_create()。它的参数包括:

  • 线程标识符(Thread ID)。
  • 线程属性(默认为NULL)。
  • 要执行的函数。
  • 函数传递的参数。
  • 以下是一个简单的创建线程的代码示例:

    #include 
    #include
    void* run(void* arg) { printf("i am a new thread!\n"); return NULL;}int main() { pthread_t tid; pthread_create(&tid, NULL, run, NULL); return 0;}

    需要注意的是,在编译时需要加上 -lpthread选项以链接线程库。

    线程等待

    主线程创建新线程后,如果不等待,新线程可能不会执行。使用 pthread_join()函数可以等待线程完成并释放资源。

    #include 
    #include
    void* run(void* arg) { printf("i am a new thread!\n"); return NULL;}int main() { pthread_t tid; pthread_create(&tid, NULL, run, NULL); pthread_join(tid, NULL); return 0;}

    线程退出

    线程退出有两种方式:

  • 使用 pthread_cancel()函数由主线程取消线程。
  • 线程内部调用 pthread_exit()函数退出。
  • #include 
    #include
    #include
    void* run(void* arg) { while(1) { printf("i am a new thread!\n"); sleep(1); } return NULL;}int main() { pthread_t tid; pthread_create(&tid, NULL, run, NULL); sleep(1); pthread_cancel(tid); return 0;}

    线程退出时,可以通过返回值传递数据。

    #include 
    #include
    #include
    #include
    void* run(void* arg) { printf("i am a new thread!\n"); int* p = (int*)malloc(sizeof(int)); *p = 10; pthread_exit((void*)p);}int main() { pthread_t tid; pthread_create(&tid, NULL, run, NULL); void* val; pthread_join(tid, &val); printf("return val is : %d\n", * (int*) val); free(val); return 0;}

    线程分离

    使用 pthread_detach()可以让线程无需等待释放资源。

    #include 
    #include
    #include
    #include
    void* run(void* arg) { printf("i am a new thread!\n"); return NULL;}int main() { pthread_t tid; pthread_create(&tid, NULL, run, NULL); pthread_detach(tid); return 0;}

    查看线程

    使用以下命令可以查看系统中的线程:

    • ps -aL:查看所有轻量级进程。
    • ps -T-p [pid]:查看特定进程下的线程数。

    线程与进程的对比

    • 资源分配:进程需要分配物理地址和页表,开销较大。
    • 调度单位:线程是调度的基本单位,效率更高。
    • 资源共享:进程内的线程共享资源,进程间独立。
    • 错误传播:进程内的线程错误可能影响整个进程,进程间不受影响。

    理解线程和进程的区别对于优化程序性能、管理系统资源至关重要。在编写并发程序时,合理使用线程可以提升效率,但也需要注意线程安全和资源管理问题。

    上一篇:多线程操作:互斥、同步与信号量(生产者消费者模型两种实现方式)
    下一篇:STL容器:双端队列deque与优先级队列priority_queue

    发表评论

    最新留言

    很好
    [***.229.124.182]2025年04月17日 13时14分13秒