Was? t
ist ein Thread, es "sieht" nichts wirklich. Streng genommen handelt es sich um eine Variable, die einen Thread darstellt - Sie haben tatsächlich keinen Thread erstellt. Wenn Sie jedoch einen Thread erstellen, wird dieser im selben Prozess wie main()
ausgeführt, sodass er Speicherplatz in diesem Sinne freigibt. t teilen Sie den Umfang der wichtigsten. Die Funktionen, die in diesem Thread ausgeführt werden, können sehen, welche Variablen für diese Funktionen gelten.
Sie könnten einen Zeiger auf i
als Benutzerdatenzeiger an pthread_create
übergeben. Oder wenn Sie auf mehr als nur i
zugreifen müssen, könnten Sie einen Zeiger auf eine Struktur übergeben, die (unter anderem) einen Zeiger auf i
usw. enthält.
Beispielcode:
#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";
}
}
Nun ... Sie können '& i' als Argument an den Thread übergeben, um es in den Bereich der Thread-Funktion zu setzen. –
@ André: Ja, ich komme dahin :-) –
& Andre. Kann jemand den vollständigen Arbeitscode einfügen, um zu zeigen, wie es funktioniert? Offensichtlich bin ich neu in Pthread. – vrbilgi