Я прочитал довольно некоторые посты, которые говорят, что сравнения и замена гарантирует атомарность, однако я до сих пор не в состоянии получить, как это делает ?? Это общий псевдо-код для сравнения и замены -Как работает Compare и Swap?
int CAS(int *ptr,int oldvalue,int newvalue)
{
int temp = *ptr;
if(*ptr == oldvalue)
*ptr = newvalue
return temp;
}
как делает это гарантирует атомарность. Например, если я использую это для реализации семафора,
void lock(int *mutex)
{
while(!CAS(mutex, 0 , 1));
}
как это предотвратить 2 темы от приобретения мьютекса в то же время? Любые указатели будут действительно оценены.
Уверенный: 'ptr',' mutex', 'NULL' ... –
Безопаснее не реализовывать свой собственный мьютекс, а использовать некоторые из системы, такие как' pthread_mutex_lock'/_unlock от glibc (с интерфейсом, определенным в POSIX: http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_mutex_lock.html) – osgx
Я не реализую свой собственный мьютекс. Просто хотел привести пример, чтобы прояснить, что я имел в виду. –