Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2012, 06:49   #1
PotatoCaptain
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 40
Сообщение Linux futex не могу разобратся

Здравствуйте, программисты. НЕ могу разобраться как использовать futex, а точнее futex_wait.
Никак не могу заставить программу останавливаться и так и сяк перепробовал.
После этой строки, программа не останавливается, а шпарит дальше.
syscall(SYS_futex, 0, FUTEX_WAIT, NULL);
Весь код ниже.
P.S. ман читал.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <iostream>
#include <fstream>
#include <string.h>
#include <sstream>
#include <sys/syscall.h>
#include <linux/futex.h>
#include <sys/time.h>

using namespace std;

void *kidfunc(void *p)
{
   cout << "Засыпаю"<< endl;
   syscall(SYS_futex, 0, FUTEX_WAIT, NULL);
   cout << "Не заснул"<<endl;

    printf ("Kid ID is ---> %d\n", getpid( )); }

int main ( )
{
pthread_t kid;
int futexVal =0;
pthread_create (&kid, NULL, kidfunc,(void *) &futexVal);
printf ("Parent ID is ---> %d\n", getpid( ));
pthread_join (kid, NULL);
printf ("No more kid!\n");
return 0;
}
PotatoCaptain вне форума Ответить с цитированием
Старый 18.12.2012, 16:40   #2
PotatoCaptain
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 40
По умолчанию

Спасибо, Сам уже разобрался
ps Для будущих поколений
futex в данной программе реализовавается так
Код:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <iostream>
#include <fstream>
#include <string.h>
#include <sstream>
#include <sys/syscall.h>
#include <linux/futex.h>
#include <sys/time.h>

using namespace std;

void *kidfunc(void *p)
{
   cout << "Засыпаю"<< endl;
   syscall(SYS_futex, p, FUTEX_WAIT, NULL);
   cout << "Не заснул"<<endl;
   printf ("Kid ID is ---> %d\n", getpid( )); }

int main ( )
{
pthread_t kid;
int futexVal =0;
pthread_create (&kid, NULL, kidfunc,(void *) &futexVal);
printf ("Parent ID is ---> %d\n", getpid( ));
pthread_join (kid, NULL);
printf ("No more kid!\n");
return 0;
}
Тему можно закрывать.
PotatoCaptain вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу разобратся!!! Hooligan Общие вопросы C/C++ 1 11.03.2012 13:30
Не могу разобратся в Dle L'oneke Свободное общение 2 27.08.2011 15:36
Не могу разобратся с датами MrBobyara SQL, базы данных 9 14.04.2011 17:20
не могу разобратся с TreeView L11L Помощь студентам 5 29.04.2010 11:20
Не могу разобратся с постусловием ArteMAN Паскаль, Turbo Pascal, PascalABC.NET 8 23.04.2010 23:28