C语言多线程编程-线程创建
2023-12-29 10:01:36
介绍
在C语言中,创建多线程主要有以下两种常见方法:
- 使用POSIX Threads(pthread)库:
POSIX Threads是Unix和Linux系统中常用的多线程API。以下是一个使用pthread创建线程的基本示例:
#include <pthread.h>
#include <stdio.h>
// 线程执行的函数
void* thread_function(void* arg) {
int thread_id = *((int*)arg);
printf("Hello from thread %d\n", thread_id);
pthread_exit(NULL); // 线程结束
}
int main() {
pthread_t thread1, thread2;
int thread_ids[] = {1, 2};
// 创建线程
pthread_create(&thread1, NULL, &thread_function, (void*)&thread_ids[0]);
pthread_create(&thread2, NULL, &thread_function, (void*)&thread_ids[1]);
// 等待线程结束
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
printf("Both threads finished.\n");
return 0;
}
实例说明
在这个例子中,我们首先包含了pthread.h
头文件,然后定义了一个名为thread_function
的函数,这个函数将在新创建的线程中执行。在main
函数中,我们使用pthread_create
函数创建了两个线程,并将thread_function
作为线程的入口点,同时传递了线程ID作为参数。pthread_join
函数用于等待线程结束。
- 在Windows系统中,可以使用
_beginthread
或_beginthreadex
函数:
以下是一个使用_beginthread
创建线程的基本示例:
#include <process.h>
#include <stdio.h>
// 线程执行的函数
unsigned __stdcall thread_function(void* arg) {
int thread_id = *((int*)arg);
printf("Hello from thread %d\n", thread_id);
_endthread(); // 线程结束
return 0;
}
int main() {
HANDLE thread1, thread2;
int thread_ids[] = {1, 2};
// 创建线程
thread1 = (HANDLE)_beginthread(&thread_function, 0, (void*)&thread_ids[0]);
thread2 = (HANDLE)_beginthread(&thread_function, 0, (void*)&thread_ids[1]);
// 等待线程结束(在Windows中没有直接对应的pthread_join函数,通常会使用 WaitForSingleObject 或其他同步原语)
WaitForSingleObject(thread1, INFINITE);
WaitForSingleObject(thread2, INFINITE);
printf("Both threads finished.\n");
return 0;
}
实例说明
在这个例子中,使用了_beginthread
函数创建线程,并使用WaitForSingleObject
函数等待线程结束。注意,Windows中的线程结束函数是_endthread
或_endthreadex
。
总结
请注意,这些示例假设你已经在你的系统上安装了相应的线程库(如pthreads for Windows或者直接在Unix/Linux系统中使用pthread)。并且,实际编程时还需要处理错误检查和其他细节。
文章来源:https://blog.csdn.net/scy518/article/details/135282230
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!