void* Run( void *arg)
时间: 2023-07-23 08:04:30 浏览: 201
函数 `Run` 是一个线程函数,它接受一个 `void*` 类型的参数 `arg`,并返回一个 `void*` 类型的指针。
在这个函数中,你可以执行一些与线程相关的操作。通常情况下,你会将需要在线程中执行的代码放在这个函数中,并将其作为线程的入口点。
函数签名 `void* Run( void *arg)` 中的 `void*` 表示返回一个指向任意类型的指针,`arg` 参数也是一个指向任意类型的指针。这样设计的目的是为了使函数更加通用,可以适应不同类型的参数和返回值。
你可以根据具体的需求,在 `Run` 函数中进行线程的初始化、执行任务、释放资源等操作。
相关问题
#include <stdio.h> #include <pthread.h> #include <stdlib.h> pthread_once_t once = PTHREAD_ONCE_INIT; void run(void) { printf("Function run is running in thread %d\n", pthread_self()); } void * thread1(void * arg) { pthread_t thid = pthread_self(); printf("Current thread1's ID is %d\n", thid); pthread_once(&once , run); printf("Thread1 ends\n"); return NULL; } void * thread2(void * arg) { pthread_t thid = pthread_self(); printf("Current thread2's ID is %d\n", thid); pthread_once(&once , run); printf("Thread2 ends\n"); return NULL; } int main(void) { pthread_t thid1, thid2; pthread_create(&thid1, NULL, thread1, NULL); pthread_create(&thid2, NULL, thread2, NULL); sleep(3); printf("Main thread exit!\n"); return 0; }解释代码
该代码是一个使用pthread_once函数的示例程序。具体说明如下:
- 在头文件中引入了pthread.h和stdlib.h,pthread.h提供了pthread_once函数,stdlib.h提供了NULL常量。
- 定义了一个pthread_once_t类型的变量once,并初始化为PTHREAD_ONCE_INIT,该变量用于保证函数run只会被执行一次。
- 定义了一个函数run,用于输出当前线程的ID。
- 定义了两个线程函数thread1和thread2,每个线程函数先输出自己的ID,然后调用pthread_once函数,该函数保证函数run只会被执行一次。
- 在main函数中,先创建两个新的线程thid1和thid2,分别执行线程函数thread1和thread2。
- main函数中使用sleep函数等待3秒,以保证两个子线程都运行完毕。
- 最后输出"Main thread exit!",表示主线程已经结束。
修改这段代码,让它能够在gcc编译器中顺利的运行#include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <pthread.h> char message[50] = "Hello World"; void *thread_function(void *arg) { printf("===CHILD run and want to sleep(5). message NOW is %s\n", (char *)arg); sleep(5); strcpy(message, "HELLO FATHER!"); pthread_exit("===Thank you for your CPU time!"); } int main() { int res; pthread_t threadCH; void *thread_result; res = pthread_create(&threadCH, NULL, thread_function, (void *)message); if (res != 0) { perror("Thread creation failed!"); exit(EXIT_FAILURE); } printf("MAIN THREAD is Waiting for thread to finish by JOIN...\n"); res = pthread_join(threadCH, &thread_result); if (res != 0) { perror("Thread join failed!\n"); exit(EXIT_FAILURE); } printf("CHILD THREAD returned %s\n", (char *)thread_result); printf("Message NOW is %s\n", message); exit(EXIT_FAILURE); }//main
这段代码在我的gcc编译器中可以顺利运行,这里我提供一些修改的建议:
1. 在调用pthread_exit()函数时,需要传递一个void*类型的指针作为线程的返回值,而不是直接传递一个字符串。因此,需要定义一个指针变量,将字符串的地址赋值给它,然后再将指针变量作为参数传递给pthread_exit()函数。
2. 在printf()函数中,需要将换行符“\n”放在双引号内,否则会出现编译错误。
下面是修改后的代码:
```
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
char message[50] = "Hello World";
void *thread_function(void *arg) {
printf("===CHILD run and want to sleep(5). message NOW is %s\n", (char *)arg);
sleep(5);
strcpy(message, "HELLO FATHER!");
char *ret = "===Thank you for your CPU time!";
pthread_exit(ret);
}
int main() {
int res;
pthread_t threadCH;
void *thread_result;
res = pthread_create(&threadCH, NULL, thread_function, (void *)message);
if (res != 0) {
perror("Thread creation failed!");
exit(EXIT_FAILURE);
}
printf("MAIN THREAD is Waiting for thread to finish by JOIN...\n");
res = pthread_join(threadCH, &thread_result);
if (res != 0) {
perror("Thread join failed!\n");
exit(EXIT_FAILURE);
}
printf("CHILD THREAD returned %s\n", (char *)thread_result);
printf("Message NOW is %s\n", message);
exit(EXIT_SUCCESS);
}
```
阅读全文