LINUX.ORG.RU

Семафоры в ядре


0

0

Всем привет!

Создаю семафор в ядре, точнее в функции fs/read_write.c, чтобы обезопасить работу своего кода в многопоточной среде. Каждый раз мне возвращается новый семафор... Почему, ведь IPC_EXCL говорит, что если создан семафор, то вернется ошибка и в этом случае я буду работать с уже существующим семафором...

смотрю ipcs -s - семафор создан.

int sid;
union semun semopts;
semopts.val = 1;
struct sembuf sem_lock;
key_t sem_key=16384;

if ((sid = sys_semget( sem_key, 1, IPC_CREAT | IPC_EXCL | 0666 )) != -1)
{
sys_semctl(sid, 0, SETVAL, semopts);
printk(KERN_ERR «\nsys_semget create new \n»);
}
else
sid = sys_semget( sem_key, 1, 0666 );

дальше делаю lock

sem_lock.sem_num =0;
sem_lock.sem_op =-1;
sem_lock.sem_flg =0;
sys_semop(sid, &sem_lock, 1);

потом unlock

struct sembuf sem_unlock;
sem_unlock.sem_num =0;
sem_unlock.sem_op = 1;
sem_unlock.sem_flg =0;
sys_semop(sid, &sem_unlock, 1);

Мда, вы батенька оригинал.

frey ★★ ()

Бугага. SysV IPC предназначены для использования _вне_ ядра, и даже там давно не рекомендуются к использованию. В ядре используется struct mutex,

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