Моя реализация — простая книжная реализация блокировки фильтра Петерсона.
У меня есть очень базовые знания C ++. Было бы очень полезно, если бы кто-то предложил взломать способ реализации в C ++.
class PetersonsFilterLock {
private:
volatile size_t no_of_threads;
volatile size_t *level;
volatile size_t *victim;
public:
PetersonsFilterLock(size_t num_threads);
void lock(size_t tid);
void unlock(size_t tid);
};
PetersonsFilterLock::PetersonsFilterLock(size_t num_threads) {
no_of_threads = num_threads;
level = new size_t[no_of_threads];
victim = new size_t[no_of_threads];
for(size_t i=0; i<no_of_threads; i++){
level[i] = 0;
}
}
void PetersonsFilterLock::lock(size_t tid) {
for(size_t i=1; i<no_of_threads; i++){
level[tid] = i;
victim[i] = tid;
for(size_t k=0; k<no_of_threads; k++){
while( k!=tid && level[k] >=i && victim[i] == tid) {}
}
}
}
void PetersonsFilterLock::unlock(size_t tid) {
level[tid] = 0;
}
Спасибо
Задача ещё не решена.
Других решений пока нет …