openmp 작업에 의해 처리되는 요소 배열이 있습니다. 태스크가 배열의 끝에 새로운 요소를 추가 할 수 있습니다. 물론 이러한 요소는 처리되어야하며 새 항목을 생성 할 수 있습니다. 현재이 코드를 사용하고 있습니다. int p;
#pragma omp critical
{
p=l.n++;
}
이 코드는 배열의 끝에 자리를 예약합니다. l의
현재 한 번에 약 20 개의 스레드로 실행되는 프로그램이 있습니다. 나는 멀티 스레딩에 상당히 익숙하지 않기 때문에 적절한 데이터 보호에 대해 다소 혼란스러워합니다. 현재 내 스레드는 데이터를 잠금으로 설정하여 이벤트를 잠금 해제합니다. 대부분의 데이터가 2 ~ 3 개의 스레드 사이에서만 공유되므로 임계 섹션을 초과하여이 옵션을 사용하기로 결정했습니다. 따
나는 생산자 - 소비자 문제를 궁극적으로 해결하려고 노력하고 있지만 우선 세마포어를 사용하여 중요한 섹션을 만들 수 있어야합니다. 현재 문제는 프로그램을 실행할 때 중요한 섹션에 여러 프로세스가있는 경우입니다. 주어진 시간에 하나의 프로세스 만이 중요 섹션에 있기를 원합니다. 여기 #include <stdio.h>
#include <stdlib.h>
#
뮤텍스가 잠겨 있다고 상상해보십시오. 뮤텍스를 잠그기를 기다리는 다른 스레드는 무제한입니다. 뮤텍스의 잠금을 해제하면 해당 스레드 중 하나가 중요한 섹션을 입력하도록 선택됩니다. 그러나 나는 어느 것을 통제 할 수 없다. 특정 스레드가 중요 섹션에 들어가게하려면 어떻게해야합니까? 필자는 POSIX 뮤텍스를 사용하여이 작업을 수행 할 수 없음을 확신하지만 다
임계 구역으로 보호 된 코드 조각을 가지고 있고 두 개 이상의 스레드가 읽기/쓰기를 위해 개체에 액세스하고있는 공유 개체가 있다고 가정 해 보겠습니다. 스레드가 임계 영역 안에 있으면 다른 스레드가 대기합니다. 스레드가 CS에서 빠져 나오면 OS는 대기중인 스레드에 대한 액세스를 제공합니다. 하나의 프로세스에만 국한되어있는 경우 CS만으로 공유 객체를 보호
크리티컬 섹션이 손상되는 곳에서 문제가 발생하지만 LockCount를 검사 한 결과 스레드가 대기중인 스레드가 1 개 있음을 알 수 있습니다 (스레드가 깨 닳은 것으로 보입니다) 잠금 상태가 잠기지 않았으므로 아직 입력되지 않았습니다. 나는 어떤 스레드가 깨어 났는지보고 싶습니다. 내가 중요 섹션 대기 스레드의 대기열을 알고, 내가이 큐/목록 구조를 뽑을
중요한 섹션의 스레드를 동기화하려고하지만 값에 따라 스레드를 동기화해야합니다. 예를 들어 서로 다른 사람들 (즉, bob, fred, bill)을 나타내는 작업을 수행하는 스레드가있는 경우 Bob과 Bill의 스레드는 동시에 발생할 수 있지만 Bob의 모든 스레드는 동기화되어 1에서 임계 영역을 통과 할 수 있습니다 시간. 나의 초기 생각은 명명 된 뮤텍스
내가 오류가 중첩. OMP에 초보자입니다. & 큰 코드에 적용한 것은 이번이 처음입니다. 큰 코드가 너무 커서 여기에 붙여 넣을 수 없으므로 먼저 &에 무엇이 나중에 깨지게할지 물어 봅니다. 이 오류는 무엇을 의미합니까? 그것은 "Dont nest # critical"을 의미합니까? 또는 내가 뭔가에 대해 망쳐 놓은 구체적인 것이 있습니까?
저는 Windbg를 사용하여 델파이로 작성된 데이터 스냅 응용 프로그램 서버에서 발생하는 교착 상태를 분석하고 있습니다. 내가 !analyze -hang -v
를 실행하면 내가 얻을이 그때 놀랍게도 그것은이 반환이에 대기하고 있었다 잠금있는 볼 !locks -V
했다
:000:x86> !analyze -hang -v
***************
를 사용하여 잠금을 공유 만들기. 그래서 내가 찾고있는 것은 공유 잠금과 독점 잠금을 비슷한 방식으로 구현하는 방법입니다. 변수를 읽거나 쓸 수있는 스레드가 여러 개 있습니다. 쓰레드가 쓰여질 때, 다른 쓰레드가 읽거나 쓰지 못하도록 차단합니다. 그러나 변수를 읽는 것은 아무것도 블럭킹해서는 안됩니다. 어떻게해야합니까?