概念:
线程是进程中的执行单元,一个进程可以包含多个线程,共享进程的资源。线程在同一进程中运行,可以并发执行,共享进程的地址空间和其他资源。
线程的特点:
轻量级: 线程比进程更轻量,创建和切换线程的开销较小。 共享资源: 线程共享进程的资源,如内存空间、文件描述符等。 并发执行: 多个线程可以并发执行,提高系统的效率。 同步问题: 线程之间共享数据,可能会出现同步问题,需要通过同步机制来解决。
线程和进程的区别:
资源共享: 进程有独立的地址空间,线程共享进程的地址空间。 切换开销: 切换线程的开销比切换进程小。 通信: 进程间通信需要额外的机制,线程之间可以直接共享数据。 独立性: 进程是独立的执行单位,线程是进程的执行单元。
线程常见函数:
线程创建:
函数: 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语言创建和管理线程,以及线程的特点和常见函数。