在C语言中,创建多线程主要有以下两种常见方法:
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
函数用于等待线程结束。
_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)。并且,实际编程时还需要处理错误检查和其他细节。