c++pthread_create
时间: 2023-09-13 10:11:45 浏览: 185
pthread_create 函数是 C 语言中用于创建线程的函数。它的原型如下:
```c
#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
```
该函数的作用是创建一个新的线程,并执行指定的函数 start_routine。start_routine 是一个指向函数的指针,它接受一个参数和返回一个指针。arg 是传递给 start_routine 的参数。
pthread_create 函数会创建一个新的线程,并将线程标识符存储在 thread 参数中。线程的属性可以通过 attr 参数进行设置,通常可以将其设置为 NULL。
创建成功时,pthread_create 函数会返回 0,否则返回一个非零的错误码,表示创建线程失败的原因。
相关问题
C++ pthread_create
pthread_create是C++中用于创建线程的函数。它是POSIX线程库的一部分,用于在多线程环境下创建新的线程。
pthread_create函数的原型如下:
```c++
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:指向函数指针,该函数是新线程要执行的函数。函数的返回类型必须为void*,参数类型为void*。
- arg:传递给start_routine函数的参数。
调用pthread_create函数后,会创建一个新的线程,并开始执行start_routine函数。start_routine函数可以是全局函数、静态成员函数或Lambda表达式等。
以下是一个简单的示例代码:
```c++
#include <iostream>
#include <pthread.h>
void* threadFunc(void* arg) {
int* num = static_cast<int*>(arg);
std::cout << "Thread number: " << *num << std::endl;
pthread_exit(NULL);
}
int main() {
pthread_t thread;
int num = 10;
int ret = pthread_create(&thread, NULL, threadFunc, &num);
if (ret != 0) {
std::cerr << "Failed to create thread" << std::endl;
return 1;
}
pthread_join(thread, NULL);
return 0;
}
```
C++ pthread_create demo
下面是一个使用 `pthread_create` 创建线程的 C++ 示例代码:
```c++
#include <iostream>
#include <pthread.h>
using namespace std;
void* thread_func(void* arg)
{
int* p = (int*)arg;
cout << "Thread ID: " << pthread_self() << ", Arg: " << *p << endl;
return NULL;
}
int main()
{
pthread_t tid;
int arg = 12345;
// 创建线程
if (pthread_create(&tid, NULL, thread_func, &arg) != 0) {
cout << "Error: Failed to create thread." << endl;
return -1;
}
// 等待线程结束
if (pthread_join(tid, NULL) != 0) {
cout << "Error: Failed to join thread." << endl;
return -1;
}
cout << "Main thread exit." << endl;
return 0;
}
```
在上面的示例代码中,我们首先定义了一个名为 `thread_func` 的函数,这个函数将作为线程的入口函数。在 `thread_func` 函数中,我们打印了当前线程的 ID 和传入的参数值,然后返回 NULL。
在主函数中,我们首先定义了一个 `pthread_t` 类型的变量 `tid`,用于存储线程 ID。然后定义了一个整型变量 `arg`,用于向线程传递参数。接着,我们使用 `pthread_create` 函数创建了一个新线程,并将线程 ID 存储在 `tid` 变量中。在调用 `pthread_create` 函数时,我们传入了四个参数:
- 第一个参数是指向线程 ID 变量的指针。
- 第二个参数是线程属性,我们将其设置为 NULL。
- 第三个参数是指向线程入口函数的指针,即 `thread_func` 函数。
- 第四个参数是传递给线程入口函数的参数,即 `arg` 变量的地址。
接下来,我们使用 `pthread_join` 函数等待线程结束。在调用 `pthread_join` 函数时,我们传入了两个参数:
- 第一个参数是要等待的线程 ID。
- 第二个参数是指向线程返回值的指针,我们将其设置为 NULL,表示不关心线程的返回值。
最后,我们在主函数中打印了一条消息,表示主线程退出。
阅读全文