亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? setfilesemaphore.m

?? Multicore - Parallel Processing on Multiple Cores
?? M
字號:
function semaphore = setfilesemaphore(fileList)
%SETFILESEMAPHORE  Set semaphore for file access.
%   SEMAPHORE = SETFILESEMAPHORE(FILENAME) sets a semaphore to get
%   exclusive access on file FILE. The semaphore is realized by generating
%   a simple Matlab data file after checking that no other semaphores are
%   existing. The function exits if the semaphore is set. Exclusive file
%   access is of course only guaranteed if all other Matlab processes use
%   semaphores to access the same file.
%
%   The output variable SEMAPHORE is needed to correctly remove the file
%   semaphore after file access. It is an error to call function
%   SETFILESEMAPHORE without output arguments.
%
%   SEMAPHORE = SETFILESEMAPHORE(FILELIST) sets semaphores for all files
%   given in cell array FILELIST. Note that function SETFILESEMAPHORE waits
%   for exclusive file access on ALL files in the list before exiting.
%
%		Note: A semaphore older than 20 seconds is considered as invalid and
%		will immediately be deleted.
%
%		Example:
%		sem = setfilesemaphore('test.mat');
%		% access file test.mat here
%		dir test.mat.semaphore.*
%		removefilesemaphore(sem);
%
%		Markus Buehren
%		Last modified 27.01.2009
%
%   See also REMOVEFILESEMAPHORE.

% Todo: What about system time differences between the local machine and
% the machine where the temporary directory lies?

showFileAccessWarnings = 0;

persistent filesToIgnore

% set times (all in seconds)
semaphoreOldTime = 20;
fixedWaitTime    = 0.05;
checkWaitTime    = 0.1;
waitInfoPeriod   = 5;
maxRandomTime    = 0.3;

if nargout ~= 1
	error('Function %s must be called with one output argument!', mfilename);
end

if ischar(fileList)
	% single file given
	fileList = {fileList};
end

nOfFiles = length(fileList);
semaphore = cell(nOfFiles, 1);
for fileNr = 1:nOfFiles
	fileName = fileList{fileNr};

	% check if given file is itself a semaphore file
	if ~isempty(regexp(fileName, '\.semaphore\.\w+\.\d+\.mat$', 'once'))
		%disp('Warning: Trying to generate a semaphore file for a semaphore file!! Will be ignored.');
		semaphore{fileNr, 1} = '';
		continue
	end

	% generate semaphore file pattern of current file
	semaphorePattern     = [fileName, '.semaphore.*.mat'];
	semaphorePatternPath = fileparts(semaphorePattern);

	startWaitTime   = now;
	displayWaitInfo = true;
	while 1
		% get list of existing semaphores
		dirStruct = dir(semaphorePattern);

		semaphoreExisting = false;
		
		if ~isempty(dirStruct)
			%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
			% other semaphore file existing %
			%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

			% check if any existing semaphore file has to be respected
			for k=1:length(dirStruct)
				
				% get file date
				if isempty(dirStruct(k).date)
					% it happens that the info in dirStruct is damaged, file is
					% checked again later in that case
					semaphoreExisting = true;
					continue
				elseif isfield(dirStruct, 'datenum')
					fileDatenum = dirStruct(k).datenum;
				else
					% in older Matlab version, the field datenum seems not to exist
					fileDatenum = datenum2(dirStruct(k).date);
				end
				
				% check if current semaphore is very old and can be ignored
				if  (now - fileDatenum)   * 86400 <= semaphoreOldTime && ...
						(now - startWaitTime) * 86400 <= semaphoreOldTime
					% semaphore file is not old and must be respected
					semaphoreExisting = true;
				else
					oldSemaphoreFileName = concatpath(semaphorePatternPath, dirStruct(k).name);

					% avoid to issue more than one warning for each file
					if ~isempty(filesToIgnore) && ismember(oldSemaphoreFileName, filesToIgnore)
						% ignore file
						continue
					end

					% add file to ignore list
					filesToIgnore{end+1} = oldSemaphoreFileName; %#ok
					disp(textwrap2(sprintf('Ignoring old semaphore of file %s.', fileName)));
					% limit the number of saved files
					if length(filesToIgnore) > 200
						filesToIgnore = filesToIgnore(end-100:end);
					end

					% try to remove semaphore file
					mbdelete(oldSemaphoreFileName, showFileAccessWarnings, 0); %% file access %%

				end
			end % k=1:length(dirStruct)

			% display info
			if semaphoreExisting && displayWaitInfo && (now - startWaitTime) * 86400 >= waitInfoPeriod
				disp(sprintf('Waiting for semaphore of file %s to disappear.', fileName));
				displayWaitInfo = false;
			end

			% wait before checking again
			pause(checkWaitTime);
			
		end % if ~isempty(dirStruct)
		
		if ~semaphoreExisting
			%%%%%%%%%%%%%%%%%%%%%%%%%%
			% set own semaphore file %
			%%%%%%%%%%%%%%%%%%%%%%%%%%
			for attemptNr = 1:10
				% build semaphore file name
				[randomNr, randomStr] = generaterandomnumber; %#ok
				semaphoreFileName = [fileName, '.semaphore.', gethostname, '.', randomStr, '.mat'];
				
				lasterror('reset');
				try
					generateemptyfile(semaphoreFileName); %% file access %%
					break
				catch
					% in very very very unlikely cases two processes might have
					% generated the same semaphore file name
					if showFileAccessWarnings
						disp(sprintf('Warning: An error occured while generating semaphore file %s:', semaphoreFileName));
						displayerrorstruct;
					end

					% wait random time and try again
					pause(checkWaitTime + maxRandomTime * randomNr);
				end
			end

			% in very unlikely cases, two semaphore files might have been created
			% at the same time -> wait fixed time, then check if any other
			% semaphore file is existing 
			pause(fixedWaitTime);

			removeOwnSemaphore = false;
			dirStruct = dir(semaphorePattern);
			if length(dirStruct) > 1
				for k=1:length(dirStruct)
					currFileName = dirStruct(k).name;
					
					if ~strcmp(currFileName, semaphoreFileName) && ...
							~isempty(filesToIgnore) && ...
							~ismember(currFileName, filesToIgnore)
						
						% at least one of the semaphores found may not be ignored
						removeOwnSemaphore = true;
						break
					end
				end
			end
			
			if removeOwnSemaphore
				% remove own semaphore file
				mbdelete(semaphoreFileName, showFileAccessWarnings, 0); %% file access %%

				% wait RANDOM time before checking everything again in "while 1" loop
				pause(maxRandomTime * generaterandomnumber);
			else
				% exclusive file access is guaranteed
				% save semaphore file name and leave while loop
				semaphore{fileNr, 1} = semaphoreFileName;				
				break
			end
		end % if ~semaphoreExisting
	end % while 1
end % for fileNr = 1:nOfFiles

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [randomNr, randomStr] = generaterandomnumber
%GENERATERANDOMNUMBER
%   in very unlikely cases, it might happen that the random states of rand
%   and randn are equal in two Matlab processes calling function
%   SETFILESEMAPHORE. For this reason, the system and cpu time are used to
%   create different random numbers even in this unlikely case.
%
%		This all were not necessary if it were possible to get some sort of a
%		Matlab process ID.

nOfDigits = 8; % length of random string will be 4*nOfDigits

randNr    = rand;
randnNr   = mod(randn+0.5, 1);
cputimeNr = mod(cputime, 100)/100;
nowNr     = mod(rem(now,1)*3600*24, 100)/100;

% random number is used for random pause after conflict
randomNr = 0.25 * (randNr + randnNr + cputimeNr + nowNr);

% random string is used for the semaphore file name
if nargout > 1
	ee = 10^nOfDigits;
	randomStr = sprintf('%.0f%.0f%.0f%.0f', ...
		ee * randNr,    ...
		ee * randnNr,   ...
		ee * cputimeNr, ...
		ee * nowNr      ...
		);
end

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
三级一区在线视频先锋| 中文字幕精品—区二区四季| 一区二区三区产品免费精品久久75| av综合在线播放| 亚洲柠檬福利资源导航| 日本久久一区二区三区| 亚洲成年人影院| 欧美一卡在线观看| 国产麻豆精品theporn| 欧美tk—视频vk| 国产99精品在线观看| 亚洲精品中文在线| 欧美日韩国产首页| 精品一区二区三区久久| 国产精品欧美极品| 在线国产电影不卡| 秋霞午夜鲁丝一区二区老狼| 久久尤物电影视频在线观看| 成人av电影观看| 亚洲成精国产精品女| 欧美成人免费网站| 99久久777色| 日韩av电影天堂| 欧美极品xxx| 欧美天堂一区二区三区| 精品综合久久久久久8888| 欧美国产97人人爽人人喊| 欧美三级视频在线观看| 韩国av一区二区三区| 亚洲免费av高清| 欧美成人福利视频| 97久久超碰国产精品| 日本亚洲一区二区| 国产91精品免费| 国产福利精品一区| 亚洲男人的天堂av| 精品免费99久久| 在线精品观看国产| 大胆欧美人体老妇| 麻豆91精品91久久久的内涵| 综合久久久久久| 日韩女优电影在线观看| 99re成人在线| 国产在线精品免费av| 五月天激情综合网| 日韩一区在线看| 久久伊人蜜桃av一区二区| 精品视频在线免费| 不卡av电影在线播放| 美女脱光内衣内裤视频久久影院| 亚洲美女在线一区| 中文字幕一区日韩精品欧美| 日韩欧美不卡一区| 91精品国产91综合久久蜜臀| 91精彩视频在线观看| 成人免费视频视频| 韩国精品主播一区二区在线观看 | 懂色中文一区二区在线播放| 婷婷综合五月天| 一区二区三区在线看| 国产精品青草综合久久久久99| 日韩欧美资源站| 91精品一区二区三区久久久久久| 色婷婷狠狠综合| av电影天堂一区二区在线| 国产精品资源在线看| 蜜臀精品一区二区三区在线观看| 亚洲午夜精品一区二区三区他趣| 成人欧美一区二区三区| 中文欧美字幕免费| 国产精品久久久久久久久图文区| 久久人人97超碰com| 精品国产91洋老外米糕| 日韩三级精品电影久久久| 欧美一区二区三区思思人| 欧美美女bb生活片| 欧美精品丝袜久久久中文字幕| 在线亚洲免费视频| 欧美色电影在线| 欧美在线不卡视频| 欧美日韩一区二区三区免费看| 色天天综合色天天久久| 91国偷自产一区二区三区观看| 成人精品在线视频观看| thepron国产精品| 99精品1区2区| 日本精品免费观看高清观看| 欧美制服丝袜第一页| 中文字幕精品三区| 亚洲男女毛片无遮挡| 一区二区三区四区av| 亚洲 欧美综合在线网络| 偷偷要91色婷婷| 麻豆freexxxx性91精品| 极品美女销魂一区二区三区| 国产成人自拍高清视频在线免费播放| 国产乱子伦一区二区三区国色天香| 激情五月激情综合网| 国产美女精品一区二区三区| 成人夜色视频网站在线观看| 色欲综合视频天天天| 欧美日韩在线三区| 精品美女在线观看| 日本一二三不卡| 亚洲综合男人的天堂| 亚洲成av人片在www色猫咪| 青椒成人免费视频| 国产乱码精品一区二区三 | 理论片日本一区| 国产美女精品在线| 色哟哟一区二区三区| 欧美一区二区在线免费观看| 久久久精品中文字幕麻豆发布| 综合激情成人伊人| 青青草97国产精品免费观看无弹窗版 | 欧美性做爰猛烈叫床潮| 日韩一区二区在线观看视频播放| 欧美极品aⅴ影院| 亚洲va中文字幕| 国产很黄免费观看久久| 欧美色综合久久| 精品国产乱码久久久久久蜜臀| 国产精品第13页| 免费观看30秒视频久久| 91在线视频网址| 日韩欧美国产wwwww| 亚洲欧美偷拍三级| 国产在线视频一区二区| 欧美三级韩国三级日本一级| 欧美极品美女视频| 开心九九激情九九欧美日韩精美视频电影 | 欧美精品v日韩精品v韩国精品v| 久久久99免费| 五月天激情综合| 99久久婷婷国产综合精品电影| 日韩欧美的一区二区| 亚洲影视在线观看| 成人黄色在线视频| 久久综合狠狠综合久久综合88| 亚洲成av人片一区二区三区| 99精品国产热久久91蜜凸| 久久久久久夜精品精品免费| 亚洲成a人片在线不卡一二三区| 日韩精品一区二区三区swag | 精品成人佐山爱一区二区| 亚洲最色的网站| 成人黄色国产精品网站大全在线免费观看| 欧美一区二区三区公司| 亚洲国产成人av| 91免费精品国自产拍在线不卡| 2024国产精品| 久久国产精品一区二区| 欧美日韩第一区日日骚| 尤物在线观看一区| 91麻豆高清视频| 最近日韩中文字幕| 粉嫩aⅴ一区二区三区四区| 久久久噜噜噜久噜久久综合| 日本aⅴ亚洲精品中文乱码| 欧美怡红院视频| 亚洲激情校园春色| 色综合天天综合色综合av | 亚洲一区二区三区美女| 99久久精品国产精品久久| 亚洲国产高清aⅴ视频| 国产精品夜夜嗨| 久久久91精品国产一区二区三区| 久久国产精品99久久人人澡| 欧美一二三区在线| 麻豆精品一区二区三区| 日韩一二在线观看| 久久精品国产亚洲aⅴ| 精品少妇一区二区三区| 久久99久国产精品黄毛片色诱| 日韩精品资源二区在线| 黄色小说综合网站| 久久色.com| 成人精品视频一区二区三区| 激情深爱一区二区| 国产亚洲精品精华液| 国产91精品久久久久久久网曝门 | 青青草国产成人99久久| 日韩美一区二区三区| 国产一区二区在线视频| 久久久高清一区二区三区| 成人在线视频一区| **性色生活片久久毛片| 欧美亚洲一区二区在线观看| 婷婷综合另类小说色区| 精品国产一二三| 波多野结衣中文字幕一区二区三区 | 韩国av一区二区三区四区| 中文幕一区二区三区久久蜜桃| 91香蕉视频mp4| 五月综合激情网| 精品少妇一区二区三区免费观看| 成人性色生活片| 五月天婷婷综合| 国产色一区二区| 欧美性色黄大片手机版|