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.
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;
}
Creates a new critical section.
CriticalSection("mysql");
Get the critical sections.
sections = CriticalSections();
keys = getArrayKeys(sections);
Enter a critical section. Returns false if the critical section is already in use.
EnterCriticalSection("mysql");
Leave a critical section.
LeaveCriticalSection("mysql");