멀티 스레드 프로그래밍의 경우 적절한 동기화를 보장하는 것이 중요합니다. 판독기/기록기 잠금은 여러 판독기와 단일 기록기가 동시에 데이터에 액세스하는 시나리오에 대한 솔루션을 제공합니다. C에서 판독기/작성기 잠금을 구현하는 방법을 살펴보겠습니다.
C 14부터 표준 라이브러리는 std::를 사용하여 내장 솔루션을 제공합니다. shared_mutex. 구문은 다음과 같습니다.
#include <shared_mutex> typedef std::shared_mutex Lock; typedef std::unique_lock<Lock> WriteLock; typedef std::shared_lock<Lock> ReadLock;
이러한 잠금을 활용하려면:
Lock myLock; void ReadFunction() { ReadLock r_lock(myLock); // Perform read-only operations here } void WriteFunction() { WriteLock w_lock(myLock); // Perform write operations here }
이전 버전의 C를 사용하는 경우 또는 표준 라이브러리 시설에 액세스할 수 없는 경우 Boost 라이브러리를 사용하여 리더/라이터를 만들 수 있습니다. 잠금:
#include <boost/thread/locks.hpp> #include <boost/thread/shared_mutex.hpp> typedef boost::shared_mutex Lock; typedef boost::unique_lock<Lock> WriteLock; typedef boost::shared_lock<Lock> ReadLock;
사용법은 표준 라이브러리 버전과 유사합니다.
Lock myLock; void ReadFunction() { ReadLock r_lock(myLock); // Perform read-only operations here } void WriteFunction() { WriteLock w_lock(myLock); // Perform write operations here }
리더/라이터 잠금을 이해하고 구현하면 데이터 액세스 패턴이 다수의 동시 판독기와 빈번하지 않은 단일 작성자로 구성된 시나리오를 위한 다중 스레드 애플리케이션입니다.
위 내용은 리더/라이터 잠금은 어떻게 C에서 동시 데이터 액세스를 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!