LINUX.ORG.RU

Синхронизация глобальных переменных в потоках


0

0

Обнуляю глобальную переменную в главной программе.
Создаю поток.
Делаю в потоке приращение этой переменной.
Возвращаю управление главной программе и в ней вижу , что глобальная переменная не изменилась.
ЧЯДНТ ?

Ответ на: комментарий от tailgunner

что-то типа :
int main()
{
    int my_global_var = 0;
    make_thread();
    printf (my_global_var );
}    
     
void make_thread()
{
    pthread_create(tid,NULL,&do_tread);
}

void * do_main(void *arg)
{
     my_global_var ++;
}

iivvaann
() автор топика
Ответ на: комментарий от iivvaann

int my_global_var определитьнужно конечно в глобальной области , а не в main

iivvaann
() автор топика
Ответ на: комментарий от iivvaann

В твоем случае нет никаких гарантий, что значение переменной изменится в потоке до того, как ты попытаешься вывести ее значение на экран. Используй pthread_join, объекты синхронизации.

mannaz
()
Ответ на: комментарий от iivvaann

Очень оригинальное у тебя форматирование кода:)

Если pthread_join тебе не подходит, то нефиг в треде менять переменную которая юзаеться гдето ещё. тред он на то и тред - синхронности тут не будет.

golodranez ★★★★
()
Ответ на: комментарий от Reset

>а толку то, это не гарантирует, что printf у тебя будет выполняться позже чем my_global_var ++;

Да этот его код никакого отношения к реальности не имеет. В настоящем коде телепаты уже нашли ошибку.

legolegs ★★★★★
()
Ответ на: комментарий от iivvaann

> Фантастика! Как все просто-то. Спасибо!

Предлагаю теперь обсудить переупорядочивание обращений к памяти на современных процессорах и компиляторах и его влияние на многопоточное программирование и синхронизацию без мютексов :)

Eshkin_kot ★★
()
Ответ на: комментарий от Eshkin_kot

> Предлагаю теперь обсудить переупорядочивание обращений к памяти на современных процессорах и компиляторах и его влияние на многопоточное программирование и синхронизацию без мютексов :)

Давай обсудим :-) на многопроцессорных х86 можно хотя бы делать ++ без мютексов (и без последующих проверок на < > = ) ?

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

> на многопроцессорных х86

Эх, мне бы ваши проблемы :)

const86 ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

>на многопроцессорных х86 можно хотя бы делать ++ без мютексов (и без последующих проверок на < > = ) ?

Да, кури Lock Prefix.
Не ++, ясное дело, но atomic_inc будет.

ratatosk
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.