Re: Question on win32 semaphore simulation
От | Magnus Hagander |
---|---|
Тема | Re: Question on win32 semaphore simulation |
Дата | |
Msg-id | 6BCB9D8A16AC4241919521715F4D8BCEA352AB@algol.sollentuna.se обсуждение исходный текст |
Ответ на | Question on win32 semaphore simulation ("Qingqing Zhou" <zhouqq@cs.toronto.edu>) |
Ответы |
Re: Question on win32 semaphore simulation
|
Список | pgsql-hackers |
> > As I reviewed the win32/sema.c, there is some code that I am not > > clear, > can > > anybody explain please? > > > > There is another problem related to concurrent operations on > win32 sema. Say two processes are doing semop(+1) > concurrently. Look at this code: > > /* Don't want the lock anymore */ > sem_counts[sops[0].sem_num]++; > ReleaseSemaphore(cur_handle, sops[0].sem_op, NULL); > > Except for the problem mentioned in the above thread that the > first line should be: sem_counts[sops[0].sem_num] += > sops[0].sem_op, the sem_counts[] are unprotected by anything, > so we might lose an update. Maybe I totally misunderstand something? I've never really looked intot eh semaphore stuff, but if sem_counts[] is in shared memory it should definitly be protected. Looking at the code, it looks fairly complex to me. I don't really know how sysv semaphores are supposed to work, or how we use them, but perhaps the whole piece of code can be simplified? //Magnus
В списке pgsql-hackers по дате отправления: