Ошибка сегментации при доступе к статически инициализированной переменной __thread

Рассмотрим следующий код:

#include <stdio.h>

__thread bool foo = true;

int
main() {
printf("foo = %d\n", foo);
return 0;
}

Скомпилируйте и запустите с:

$ g++ tls.cpp -o tls -o tls
$ ./tls

В некоторых системах, таких как Amazon Linux 2013.09.0, ami-5b792c32, ядро ​​3.4.62-53.42.amzn1.i686, g ++ 4.6.3 20120306 (Red Hat 4.6.3-2) — это приводит к ошибке сегментации как только foo Доступ

С другой стороны, явная инициализация foo в коде не приводит к ошибке сегментации:

#include <stdio.h>

__thread bool foo = true;

int
main() {
foo = true;  /* Added!! */
printf("foo = %d\n", foo);
return 0;
}

Почему первый пример кода дает сбой в некоторой системе, а последний — нет? Разве статическая инициализация переменных __thread не должна работать? Может ли операционная система сломаться?

6

Решение

Вы забыли сообщить компилятору, что хотите поддерживать потоки. Скорее всего, флаг -pthread,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]