Re[3]: Атомарное присваивание указателю
От: Алексей.  
Дата: 27.10.04 17:32
Оценка:
TB>>Такие команды есть у всех приличных процессоров. В Win32 API есть
TB>>соответствующие функции: InterlockedExchange, InterlockedIncrement и т.д.

Посмотрел описание InterlockedExchange, похоже что она работает вот так:

void * atomic_exchange ( void ** address, void * new_value )
{
  lock ( address );
  void * return_value = *address;
  *address == new_value;
  unlock ( address );
  return return_value;
}


а мне нужно вот так:

void * atomic_pointer_assignment ( void ** address, void * old_value, void * new_value )
{
  lock ( address );
  if ( *address == old_value ) // значение не изменено другим потоком
    *address = new_value; // значит можно поменять значение указателя
  void * return_value = *address;
  unlock ( address );
  return return_value; // возвращается индикатор успеха/неуспеха операции
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.