Что?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";
}
}