C에서 고성능 동기화 생성기를 작성하려고합니다. 이벤트를 피드로 보내고 스레드가 중복을받지 않도록 여러 스레드에서 비동기 적으로 폴링/읽기를 수행 할 수 있기를 원합니다.C의 스레드 안전성?
동기화가 일반적으로 수행되는 방법에 대해 많이 알지 못합니다. 누군가 내가 사용할 수있는 하나 이상의 기술에 대한 높은 수준의 설명을 줄 수 있습니까?
감사합니다!
C에서 고성능 동기화 생성기를 작성하려고합니다. 이벤트를 피드로 보내고 스레드가 중복을받지 않도록 여러 스레드에서 비동기 적으로 폴링/읽기를 수행 할 수 있기를 원합니다.C의 스레드 안전성?
동기화가 일반적으로 수행되는 방법에 대해 많이 알지 못합니다. 누군가 내가 사용할 수있는 하나 이상의 기술에 대한 높은 수준의 설명을 줄 수 있습니까?
감사합니다!
스레드 안전의 기본 개념은 Mutex입니다 (다른 종류의 잠금이 있지만). 여러 개의 액세스 및 경쟁 조건으로부터 메모리를 보호하는 데 사용됩니다.
좋은 사용 예는 Linked List을 사용할 때입니다. 두 개의 다른 스레드가 동시에 수정하도록 허용 할 수 없습니다. 귀하의 예에서, 당신은 아마도 연결 목록을 사용하여 대기열을 만들 수 있으며, 각 쓰레드는 그것으로부터 어떤 데이터를 소비합니다.
분명히 다른 동기화 메커니즘이 있지만이 기능은 (지금까지는) 가장 중요합니다.
자세한 구현 정보는 this 페이지 (하단의 참조 페이지)를 참조하십시오.
thread implementation이 필요합니다. C에는 다중 처리 개념에 대한 기본 제공 지원이 없습니다. 스레드는 종종 라이브러리로 구현됩니다. 이러한 라이브러리는 일반적으로 여러 스레드의 실행, 데이터 보호 방법 등을 동기화하는 방법을 제공합니다.
구현 독립적 인 방식으로 동기화하는 것이 불가능합니까? 나머지 아키텍쳐에 대해서는 잘 모르기 때문에 물어 봅니다. 네트워크를 통해 이벤트가 전달되는 시스템 모드가있을 수 있습니다. 따라서 동기화는 내부의 스레드가 아닌 머신간에 동기화가 이루어질 수 있습니다. 단일 부모 프로세스. 이것이 중요한 차이를 낳습니까? –
두 개의 별도 기계는 메모리를 공유하지 않으므로 여기서 확인해야합니다. –
그 말이 맞는 것 같아요. 이 경우의 동기화는 TCP 스택 또는 소켓 처리 코드에 있습니다. –
스레드간에 공유 변수가있는 경우 스레드 안전이 문제가됩니다. 공유 변수가 없다면 문제가되지 않습니다. 모든 이벤트는 읽기 전용이며 청취자에게 무작위로 분리 될 수 있습니다.
스레드 안전성은 멀티 스레드 구현이 제공하는 모든 동기화 프리미티브를 사용하여 이루어집니다.
시작점은 연결된 이벤트 목록, 보호하는 잠금 및 모든 스레드가 잠금을 취하고 포인터를 첫 번째 이벤트로 조정하여 하나의 이벤트를 소비 한 다음 잠금을 해제합니다. 이벤트를 추가하면 전체 목록도 잠 깁니다. 목록이 비어 있으면 작업자가 종료됩니다.
는 거기에서 다양한 최적화가 가능합니다 :
고마워요! 이것이 내가 잊어 버린 개념이라고 생각합니다. 클라이언트가 별도의 스레드에있을 때와 마찬가지로 클라이언트가 다른 시스템에있는 곳에서 작업하기를 원하기 때문에 스레드 기반의 동기화가 제대로 작동하는지 100 % 확신 할 수는 없습니다. –
어쩌면 당신은 당신이하려고하는 것과 당신이 그것을 어떻게 할 것인지 더 잘 이해할 수 있어야합니다. 동일한 머신에 많은 클라이언트가 있다고하더라도 다른 스레드 또는 다른 프로세스를 실행해야합니까? 그렇게 명확하지 않습니다. –
저는 응용 프로그램을 배치하는 방법을 정확히 이해하고 있습니다. 감사 :) –