Linux线程入门(一)

文摘   2024-08-26 07:30   内蒙古  

概念:

线程是进程中的执行单元,一个进程可以包含多个线程,共享进程的资源。线程在同一进程中运行,可以并发执行,共享进程的地址空间和其他资源。

线程的特点:

  1. 轻量级: 线程比进程更轻量,创建和切换线程的开销较小。
  2. 共享资源: 线程共享进程的资源,如内存空间、文件描述符等。
  3. 并发执行: 多个线程可以并发执行,提高系统的效率。
  4. 同步问题: 线程之间共享数据,可能会出现同步问题,需要通过同步机制来解决。

线程和进程的区别:

  1. 资源共享: 进程有独立的地址空间,线程共享进程的地址空间。
  2. 切换开销: 切换线程的开销比切换进程小。
  3. 通信: 进程间通信需要额外的机制,线程之间可以直接共享数据。
  4. 独立性: 进程是独立的执行单位,线程是进程的执行单元。

线程常见函数:

线程创建:

  • 函数: pthread_create()
  • 原型: int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg)
  • 参数:
    • thread:用于存储新线程的标识符。
    • attr:线程属性,通常为NULL
    • start_routine:线程的入口函数。
    • arg:传递给线程入口函数的参数。
  • 功能: 创建一个新线程。

线程等待:

  • 函数: pthread_join()
  • 原型: int pthread_join(pthread_t thread, void **retval)
  • 参数:
    • thread:要等待的线程标识符。
    • retval:用于存储线程返回值的指针。
  • 功能: 阻塞调用线程,直到指定线程结束。

线程退出:

  • 函数: pthread_exit()
  • 原型: void pthread_exit(void *retval)
  • 参数:
    • retval:线程的返回值。
  • 功能: 终止当前线程,并返回一个值。

线程取消:

  • 函数: pthread_cancel()
  • 原型: int pthread_cancel(pthread_t thread)
  • 功能: 请求取消指定线程的执行。

线程属性操作:

  • 函数: pthread_attr_init(), pthread_attr_destroy(), pthread_attr_setdetachstate(), pthread_attr_getdetachstate(), pthread_attr_setschedparam(), pthread_attr_getschedparam(), 等等。
  • 功能: 用于初始化、销毁线程属性对象,设置线程的分离状态、调度参数等。

线程同步:

  • 函数: pthread_mutex_init(), pthread_mutex_destroy(), pthread_mutex_lock(), pthread_mutex_unlock(), pthread_cond_init(), pthread_cond_destroy(), pthread_cond_wait(), pthread_cond_signal(), 等等。
  • 功能: 提供互斥锁和条件变量等机制,用于线程间的同步和互斥访问共享资源。

线程信号处理:

  • 函数: pthread_sigmask(), pthread_kill(), 等等。
  • 功能: 用于处理线程的信号掩码和发送信号。

使用C语言代码创建线程示例:

下面是一个简单的C语言程序,演示了如何创建一个线程:

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

void *thread_function(void *arg) {
    int *value = (int *)arg;
    printf("Thread function: received value %d\n", *value);
    
    // 模拟线程执行
    for (int i = 0; i < 5; i++) {
        printf("Thread is running...\n");
    }

    pthread_exit(NULL);
}

int main() {
    pthread_t thread_id;
    int value = 42;

    // 创建线程
    if (pthread_create(&thread_id, NULL, thread_function, (void *)&value) != 0) {
        fprintf(stderr"Error creating thread\n");
        exit(1);
    }

    // 等待线程结束
    if (pthread_join(thread_id, NULL) != 0) {
        fprintf(stderr"Error joining thread\n");
        exit(1);
    }

    printf("Main function: Thread finished\n");

    return 0;
}

在这个例子中,pthread_create()函数用于创建一个新线程,指定了线程的入口函数thread_function,并传递了一个参数value。在thread_function中,线程接收并打印参数值,然后执行一个简单的循环,最后调用pthread_exit()退出线程。

希望这个示例代码能帮助您理解如何使用C语言创建和管理线程,以及线程的特点和常见函数。


兄弟嵌入式
从入门到精通,学习并分享嵌入式软、硬件的知识。
 最新文章