В более общем смысле, если кто-то хочет защитить сегмент кода с помощью одновременного доступа, одним из способов является использование функций, предоставляемых библиотекой, которая поставляется вместе с компилятором, относительно лежащего в основе O.S.
В C / C ++ функции похожи на:
EnterCriticalSection ([Initialized]Section_ID);
< CODE_TO_PROTECT >
LeaveCriticalSection ([Initialized]Section_ID);
Но, возможно, в вашем случае для повышения эффективности вашей стратегии используйте следующую модификацию (если она доступна на вашем языке):
global:
bool book = TRUE;
function book($memberid, $classid){
while (!book); \\ this waits until the variable 'book' isn't TRUE
// eventually, release the control of the task scheduler with:
// while (!book) Sleep (1);
// performing a check every each millisecond.
// then, first of all, set the variable to FALSE
book = FALSE;
// update the db
...
...
// finally, set the variable 'book' again to TRUE...
book = TRUE;
}