소비자 스레드와 제작자 스레드로 프로그램을 작성하고 있습니다. 이제는 큐 동기화가 프로그램의 큰 오버 헤드로 보이고 일부 잠금 대기열 구현을 찾았지만 Lamport의 버전과 개선 된 버전 만 발견했습니다. PPoPP '08 :C에서 단일 소비자 단일 제작자 잠금 장치 사용 가능 큐 구현?
enqueue_nonblock(data) {
if (NULL != buffer[head]) {
return EWOULDBLOCK;
}
buffer[head] = data;
head = NEXT(head);
return 0;
}
dequeue_nonblock(data) {
data = buffer[tail];
if (NULL == data) {
return EWOULDBLOCK;
}
buffer[tail] = NULL;
tail = NEXT(tail);
return 0;
}
는 두 버전 모두 동적으로 공간을 할당으로 malloc()를 사용하는 단일 소비자 단일 생산자 잠금없는 큐 구현이 내 질문 즉, 데이터에 대한 사전 할당 된 배열을 필요로 ?
또 다른 관련 질문은 대기열 동기화의 정확한 오버 헤드를 어떻게 측정 할 수 있습니까? pthread_mutex_lock() 등의 시간이 얼마나 걸리는지 등.
malloc point에 동의하지만 mutex에는 동의하지 않습니다. 죽여라. 따라서 한 명의 제작자와 한 명의 소비자가 무료로 작품을 잠그고 이것을 사용해야합니다. 이제이 소비자는 샤딩 논리를 적용하여 다른 소비자에게 데이터를 전달할 수 있습니다. 자물쇠가 죽어. – siddhusingh