2013-06-14 2 views
0

나는 M[nxn] 행렬을 가지고 있으며 다음 조건을 고려하여 [n, n] 점의 요소 합계를 계산해야합니다.
- 무작위로 행이나 열을 선택하십시오.
- 해당 행 또는 열의 마지막 요소에있는 요소이므로 다른 요소를 0으로 설정합니다.

이제는 두 개 이상의 프로세스를 사용하여이 합계를 수행해야하므로 문제는 내가 작업중인 각 행이나 열을 잠글 수 있다는 것입니다. 어떻게 해결할 수 있을까요?
나는 fcntl()과 그 안에 속한 다른 것들을 사용해야한다는 것을 알고 있지만, 나는 그것을 해결하는 방법에 관심이있다.
파일 잠금을 사용하는 행렬 요소의 합계

답변

0

실제로 파일을 제외하고는 행렬을 잠글 필요가 없습니다. 그 파일에 있다면, 나는 먼저 행렬을 메모리에로드 한 다음 자물쇠가 필요하지 않습니다.

nxm 행렬을 사용하는 경우 부모 프로세스가 m 개의 하위 프로세스를 분기하고 하위 프로세스를 기다리도록하십시오.

각 하위 프로세스에서 각각 하나씩 m 행을 가져옵니다.

각 하위 프로세스에 각 행을 추가하고 값을 0으로 설정하고 합계를 마지막 열에 입력하십시오.

각 하위 프로세스를 종료하십시오.

모두 완료되면 부모 프로세스가 열의 n 번째 행을 합계하게하십시오.

모든 하위 프로세스는 자체 데이터 세트에서 작동하므로 동일한 메모리 영역에 액세스하지 않으므로 매트릭스 프로세스를 잠글 필요가 없습니다.

+0

답장을 보내 주셔서 감사합니다. 사실, 이렇게 할 수 있지만, 내 작업은 무작위로 행/열 및 그런 식으로 합계를 선택하고 중복 방지하려면 해당 행/열 잠글 필요가 있습니다. – Adorjan

+0

int ret = fcntl (fd, F_SETLKW, &lock);)이 파일 설명자를 쓰기 위해 잠글 것이므로 다른 스레드와 함께 파일을 읽는 동안 파일에 쓸 수 있습니다. – Magn3s1um