LINUX.ORG.RU

можно ли в массиве с элементами защищёнными rw-семафорами переключить read-lock into write-lock без состояния гонки между состояниями семафора?


0

0

тоесть есть массив элементов защищённых семафорами.

некоторому процессу нужен свободный элемент массива, для чего он перебирает все еэлементы по порядку, выставляя write-lock и если елемент свободен то захватывает его и снимает блокировку.

так вот я подумал что делать write-lock на всех элементах поочереди не стоит а только на том который мы захватили

так вот можно ли превратить read lock во write lock так чтобы между изменениями состояния семафора его у нас не отобрали???

★★★★★

или снимать read lock устанавливать write lock и делать повторную проверку на свободность элемента. это собственно тот алгоритм от которого я хочу уйти ибо он мне не нравится

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

на текущий момент лучше чем 

    for(i=0; i<__FD_SETSIZE; i++){
        send_buf_arr_rlock_item(i);
        if(!send_buf_arr[i].id){
            send_buf_arr_runlock_item(i);
            send_buf_arr_wlock_item(i);
            if(!send_buf_arr[i].id) break;
            else send_buf_arr_wunlock_item(i);
        }else send_buf_arr_runlock_item(i);
    }

мне ничего придумать не удалось

cvv ★★★★★
() автор топика

> можно ли превратить read lock во write lock так чтобы между
> изменениями состояния семафора его у нас не отобрали???

нет.

> без состояния гонки между состояниями семафора?
> между изменениями состояния семафора его у нас не отобрали???

на будущее, это называется "atomic" (атомарно), так
просто понятнее было бы.

btw, глядя на отрывки вашего кода я на 99.(9) % уверен,
что семафоры вам не нужны абсолютно. простой spinlock.
и даже не на каждый элемент.

кроме того, использование rw_semaphore вместо semaphore
очень редко даст выигрыш, разве только вы очень хорошо
понимаете, что делаете.

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

>> без состояния гонки между состояниями семафора?

>> между изменениями состояния семафора его у нас не отобрали???

>на будущее, это называется "atomic" (атомарно),

эт мы знаем

>так просто понятнее было бы.

хорошо

>btw, глядя на отрывки вашего кода я на 99.(9) % уверен, что семафоры вам не нужны абсолютно. простой spinlock.

я имею в проекте заменить семафоры rw-блокировками, но пока не слышал ни одного аргумента в пользу такого решения кроме некоторого увеличения производительности

>и даже не на каждый элемент.

сомневаюсь

>кроме того, использование rw_semaphore вместо semaphore очень редко даст выигрыш, разве только вы очень хорошо понимаете, что делаете.

в моём случае тоже сильно сомневаюсь.

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