Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

futex руками

602
09 октября 2009 года
KPI Student
265 / / 16.12.2006
Вот, попробовал попробовать руками поработать с futex-ами, в целях образования, вручную без pthread сделать на его основе что-то вроде event-ов и критических секций. Сразу ступор - вот ман:

 
Код:
#include <linux/futex.h>
#include <sys/time.h>
int futex(int *uaddr, int op, int valconst struct timespec * timeout , int *uaddr2, int val3);


У меня же под Ubuntu x64, 2.6.28, gcc 4.3 уже при подключении первых двух хидеров начинаются глюки - timespec объявлен в <sys/time.h> и в <linux/time.h>, последний, видимо включается внутри <linux/futex.h>.

Ну это не беда, убрал <sys/time.h>, остальное затолкнул в своем хидере в отдельный неймспейс, вроде все ок - никаких конфликтов.

Вот только прототипа
 
Код:
int futex(int *uaddr, int op, int val, const struct timespec * timeout , int *uaddr2, int val3);
, как говорит компилятор, нигде нет.

Гуглил, где-то "int futex(...)", где-то "int sys_futex(...)" -- один фиг.

Примерный код:
Код:
namespace cfutex
{
#include <linux/futex.h>

class CFutex
{
public:
    long wait(void* addr, int waitif, const timespec * timeout)
    {
        return futex(....);     // функция futex(....) не определена в текущей области видимости
    }
};
}


Скажите пожалуйста, с чем связано такое количество граблей (хотя бы то, что два хидера, указанные в мане у меня не совместимы без бубна) и что я делаю не правильно?


P.S. Предыдущая тема не создалась ввиду глюка, написать в нее сообщение не смог, просьба удалить. глюк здеся
361
09 октября 2009 года
Odissey_
661 / / 19.09.2006
Хм. Не сталкивался в плотную с futex`ами, но возможно стоит проверить выдает ли gcc -v строчку "--enable-linux-futex" ? То есть собран ли комплиятор с поддержкой этих самых futex`ов =)
43K
09 октября 2009 года
loki231
76 / / 27.09.2009
Я тоже futex'ы не использовал напрямую, но вот что говорится в man futex:

NOTES
To reiterate, bare futexes are not intended as an easy-to-use abstraction for end-users. ([COLOR="Red"]There is no wrapper
function for this system call in glibc[/COLOR].) Implementors are expected to be assembly literate and to have read
the sources of the futex userspace library referenced below.

Так что man syscall, man 2 intro и syscall (SYS_futex, ...).
602
10 октября 2009 года
KPI Student
265 / / 16.12.2006
Спасибр большое за оба совета, приду домой - обязательно попробую! Насчет последнего поста как в ералаше - понял, что они не пересекаются (параллельные линии), но не понял, почему. Точнее, не понял, что же я тогда видел в мане по "man 2 futex":)

Ну то не так важно - опенсорсный проект, при всем уважении и не такие чудеса возможны.

Думаю, вариант с прямым вызовом syscall пройдет. еще раз спасибо за совет!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог