Skip to content

Latest commit

 

History

History
78 lines (62 loc) · 1.36 KB

critical.md

File metadata and controls

78 lines (62 loc) · 1.36 KB

Critical Sections

Critical sections are used to protect shared resources from concurrent access, which can lead to race conditions and other synchronization issues. By executing a critical section as an atomic operation, you can ensure that the shared resource is not modified by another process or thread while the critical section is being executed.

Example

You can define the following GSC functions to ensure concurrent access to MySQL/HTTP/FTP/CURL etc...

main()
{
	critical("mysql");
	critical("http");
	critical("ftp");
	critical("curl");
}

critical(id)
{
	CriticalSection(id);
}

critical_enter(id)
{
	while (!EnterCriticalSection(id))
		wait 0.05;
}

critical_release(id)
{
	LeaveCriticalSection(id);
}

AsyncWait(request)
{
	status = AsyncStatus(request);
	while (status <= 1)
	{
		wait 0.05;
		status = AsyncStatus(request);
	}
	return status;
}

CriticalSection(<id>)

Creates a new critical section.

CriticalSection("mysql");

CriticalSections()

Get the critical sections.

sections = CriticalSections();
keys = getArrayKeys(sections);

EnterCriticalSection(<id>)

Enter a critical section. Returns false if the critical section is already in use.

EnterCriticalSection("mysql");

LeaveCriticalSection(<id>)

Leave a critical section.

LeaveCriticalSection("mysql");