【Linux】线程概念和线程控制
在Linux中,线程是轻量级的进程,它们共享相同的地址空间。线程有自己的堆栈和局部变量,但它们可以访问共享的全局变量。线程可以在同一个进程中并发执行,从而提高程序的并发性能。
创建线程:
#include <pthread.h>
void* thread_function(void* arg) {
// 线程执行的代码
return NULL;
}
int main() {
pthread_t thread;
int ret;
ret = pthread_create(&thread, NULL, thread_function, NULL);
if (ret != 0) {
// 创建线程失败处理
}
// 等待线程结束或其它处理
pthread_join(thread, NULL);
return 0;
}
在上面的例子中,pthread_create
函数用于创建新的线程,它接收一个 pthread_t
类型的指针,用于存储新创建线程的ID。thread_function
是线程执行的函数。
线程等待:
#include <pthread.h>
void* thread_function(void* arg) {
// 线程执行的代码
pthread_exit(NULL); // 线程返回
}
int main() {
pthread_t thread;
int ret;
ret = pthread_create(&thread, NULL, thread_function, NULL);
if (ret != 0) {
// 创建线程失败处理
}
// 等待线程结束
pthread_join(thread, NULL);
return 0;
}
在main
函数中,pthread_join
函数用于等待线程结束。当线程结束时,它会释放所有由线程保留的资源,并可以通过pthread_join
回收这些资源。
取消线程:
#include <pthread.h>
void* thread_function(void* arg) {
while(1) {
// 执行一些工作
}
return NULL;
}
int main() {
pthread_t thread;
int ret;
ret = pthread_create(&thread, NULL, thread_function, NULL);
if (ret != 0) {
// 创建线程失败处理
}
pthread_cancel(thread); // 取消线程
pthread_join(thread, NULL);
return 0;
}
在上面的例子中,pthread_cancel
函数用于请求取消一个线程。线程可以无条件终止,也可以返回到取消点再次运行。
线程同步:
#include <pthread.h>
#include <semaphore.h>
sem_t bin_sem;
void* thread_function(void* arg) {
sem_wait(&bin_sem); // 等待信号
// 线程继续执行
return NULL;
}
int main() {
pthread_t thread;
int ret;
sem_init(&bin_sem, 0, 0); // 初始化信号量为0
ret = pthread_create(&thread, NULL, thread_function, NULL);
if (ret != 0) {
// 创建线程失败处理
}
// 做一些其它工作...
sem_post(&bin_sem); // 发送信号
pthread_join(thread, NULL);
return 0;
}
在这个例子中,我们使用了一个二进制信号量来同步两个线程。sem_wait
函数会阻塞线程,直到
评论已关闭