pthread_create函数样例
时间: 2023-09-08 14:14:10 浏览: 79
pthread_create函数的样例如下:
```
#include <pthread.h>
#include <stdio.h>
void* print_thread_function(void* arg) {
int thread_id = *(int*)arg;
printf("Hello from thread %d!\n", thread_id);
return NULL;
}
int main() {
pthread_t thread_id;
int arg = 1;
pthread_create(&thread_id, NULL, print_thread_function, &arg);
printf("Hello from main thread!\n");
pthread_join(thread_id, NULL);
return 0;
}
```
该样例中,主线程创建了一个新的线程,并通过pthread_create函数启动该线程,该线程调用了print_thread_function函数,主线程则继续执行。在print_thread_function函数中,该线程输出了一条信息,指明该线程是哪个线程。最后,主线程通过pthread_join函数等待该线程执行完毕。
相关问题
pthread_create函数使用
pthread_create() 函数用于创建一个新的线程。它的语法格式如下:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
其中,参数thread是一个指向pthread_t类型的指针,用于存储新线程的标识符。attr是一个指向pthread_attr_t类型的指针,用于指定线程的属性,一般情况下可以设置为NULL。start_routine是一个指向函数的指针,该函数将作为新线程的入口点。arg是传递给start_routine函数的参数,可以是任意类型的指针。
下面是一个使用pthread_create()函数的样例:
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
void *ThreadFun(void *arg) {
if (arg == NULL) {
printf("arg is NULL\n");
} else {
printf("%s\n", (char*)arg);
}
return NULL;
}
int main() {
int res;
char * url = "http://www.biancheng.net";
pthread_t myThread1, myThread2;
res = pthread_create(&myThread1, NULL, ThreadFun, NULL);
if (res != 0) {
printf("线程创建失败");
return 0;
}
sleep(5);
res = pthread_create(&myThread2, NULL, ThreadFun, (void*)url);
if (res != 0) {
printf("线程创建失败");
return 0;
}
sleep(5);
return 0;
}
在上述样例中,我们通过pthread_create()函数分别创建了两个线程myThread1和myThread2。其中,myThread1没有传递参数,而myThread2传递了一个指向url字符串的指针作为参数。这两个线程会执行ThreadFun()函数,并根据传递的参数进行相应的操作。主线程通过调用sleep()函数等待两个子线程执行完成。
pthread_cond_wait 样例代码
以下是一个简单的 pthread_cond_wait 样例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
pthread_mutex_t mutex;
pthread_cond_t cond;
void* thread1(void* arg)
{
printf("thread1 start\n");
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond, &mutex); // 等待条件变量
printf("thread1 end\n");
pthread_mutex_unlock(&mutex);
return NULL;
}
void* thread2(void* arg)
{
printf("thread2 start\n");
pthread_mutex_lock(&mutex);
pthread_cond_signal(&cond); // 发送条件变量
printf("thread2 end\n");
pthread_mutex_unlock(&mutex);
return NULL;
}
int main()
{
pthread_t tid1, tid2;
pthread_mutex_init(&mutex, NULL);
pthread_cond_init(&cond, NULL);
pthread_create(&tid1, NULL, thread1, NULL);
pthread_create(&tid2, NULL, thread2, NULL);
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
pthread_mutex_destroy(&mutex);
pthread_cond_destroy(&cond);
return 0;
}
```
在这个样例代码中,线程 1 和线程 2 同时运行。线程 1 在等待条件变量 cond,而线程 2 在发送条件变量 cond。当线程 2 发送条件变量后,线程 1 才能继续执行。
在线程 1 中,pthread_cond_wait 函数会阻塞线程,并释放 mutex。当线程 2 发送条件变量后,线程 1 才会被唤醒,继续执行。在线程 2 中,pthread_cond_signal 函数会发送条件变量,唤醒等待条件变量的线程。
阅读全文