int main()
{
int i;
pthread_t t;
}
Run Code Online (Sandbox Code Playgroud)
看不到我?在主要内部创建,对吧?这意味着它必须使用相同的共享内存main()正在使用?如何在不制作全局变量的情况下让它看到我?
什么?t是一个线程,它并没有真正"看到"任何东西.严格来说,它是一个表示线程的变量 - 你实际上并没有创建一个线程 - 但假设你创建了一个线程,它在同一个进程中运行main(),因此它在这个意义上共享内存空间,但它没有分享主要的范围.在该线程中运行的函数可以看到这些函数的范围内的任何变量.
您可以将指针i作为用户数据指针传递给pthread_create.或者,如果您需要访问的不仅仅是i,您可以将指针传递给某个结构,该结构包含(除其他外)指针i,等等.
示例代码:
#include <pthread.h>
#include <iostream>
#include <cstring>
void *thread_entry_point(void *data) {
int *idata = static_cast<int*>(data);
std::cout << "thread: i = " << *idata << "\n";
*idata = 23;
return const_cast<char*>("might as well return something");
}
int main() {
int i = 12;
pthread_t thr;
int err = pthread_create(&thr, 0, thread_entry_point, &i);
if (err == 0) {
void *result;
pthread_join(thr, &result);
std::cout << "main: result = " << static_cast<const char*>(result) << "\n";
std::cout << "main: i = " << i << "\n";
} else {
std::cout << "error creating thread: " << err << " " << std::strerror(err) << "\n";
}
}
Run Code Online (Sandbox Code Playgroud)