How to implement semaphore concept in Matlab?

10 Ansichten (letzte 30 Tage)
DhanaLakshmiR
DhanaLakshmiR am 27 Feb. 2018
Kommentiert: Walter Roberson am 27 Feb. 2018
Is this possible to implement semaphore concept in matlab? Kindly give some explanation which will be very useful for my project.
  2 Kommentare
Rik
Rik am 27 Feb. 2018
Probably. We are volunteers, not mind readers. If you want a useful explanation, you'll have to describe your project at the very least. I would advise you to read the following two links, and come back when you have an actual answerable question. Link 1 and link 2.
DhanaLakshmiR
DhanaLakshmiR am 27 Feb. 2018
Bearbeitet: DhanaLakshmiR am 27 Feb. 2018
Apologize for my previous question. I am having two m-files which are running simultaneously.
% First mfile
function[x1] =fcn1(x,y)
for i=1:10
y=y+40;
x1=x+y;
end
%second mfile
function[x3]= fcn2(y2)
for j=10
y3=y2+4;
x3=y2+y3;
end
%parallel code
delete(gcp);
parpool('AttachedFiles',{'fcn1.m','fcn2.m'})
addpath('C:\Users\SUBATHRA\Documents\MATLAB');
poolobj = gcp('nocreate');
if isempty(poolobj)
poolsize = 0;
else
poolsize = poolobj.NumWorkers
end
spmd
for i=1:.1:10
if labindex == 1
fcn1_output = fcn1(20,5)
labSend(fcn1_output, 2);
else
fcn2_parameters = labReceive()
fcn2_output = fcn2(fcn2_parameters)
end
end
end
Because of for loop ,the output is coming after the final iteration of the loop.But i need the output for each and every iteration.when fcn1 is sending values fcn2 have to wait until the values are received after that i have to work based on the code. So that i thought semaphore concept will resolve the problem. Kindly give answers. If my question is not valid apologize me and ask i will explain.

Melden Sie sich an, um zu kommentieren.

Antworten (1)

Walter Roberson
Walter Roberson am 27 Feb. 2018
You have no parallel code as you have no parfor or spmd or batch or parfeval or parfevalOnAll
You use labindex which is not valid for parfor but it is valid for spmd. If you are using spmd then the tool for semaphore is effectively to use labBarrier()
  2 Kommentare
DhanaLakshmiR
DhanaLakshmiR am 27 Feb. 2018
i have created this for parallel running. I have missed spmd. Now the code has changed.
Walter Roberson
Walter Roberson am 27 Feb. 2018
You appear to expect exactly two workers. You should specify the number of workers when you create the parpool as the default is the number of physical cores and even if your setup only has two cores other people running the code might have more.

Melden Sie sich an, um zu kommentieren.

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by