Я всегда находил синхронизированное заявление Java, чтобы быть чистым способом сделать семафор, как замок и отпирает:Возможно ли иметь Java как инструкции синхронизации в C, C++?
public void addName(String name) {
synchronized(this) {
lastName = name;
nameCount++;
}
nameList.add(name);
}
Хотя основная концепция мониторов, используемых в Java и PTHREAD мьютексов разные, PTHREAD мьютексов в их наиболее основной часто используются как:
void addName(char* name) {
int status = -1;
status = pthread_mutex_lock(this->lock);
if (status == 0) {
this->lastName = name;
this->nameCount++;
pthread_mutex_unlock(this->lock);
}
nameList->add(name);
}
Я понимаю, что приведенный выше код не реально использовать возможности PTHREAD мьютексы. Он также не обрабатывает все сценарии ошибок. Однако это, вероятно, самый распространенный способ использования мьютексов pthread. Сказать, что я думаю, что было бы неплохо иметь более чистые идиомы для таких синхронизаций:
public void addName(char* name) {
synchronized(this->lock) {
this->lastName = name;
this->nameCount++;
}
nameList.add(name);
}
Итак, можно сделать это в C, C++?
Owch, это одна большая куча макросов для такой простой идеи. – matsjoyce
Вы не должны использовать [зарезервированные имена] (http://stackoverflow.com/questions/228783). –
Yep, C++ идет для RAII и, следовательно, не нуждается в макросах. – Deduplicator