exclusivelock
Prevents other threads from simultaneously accessing a single or group of databases.
[exclusivelock database list]...WebDNA...[/exclusivelock]
To prevent a group of databases from being modified by other threads (other 'hits' to the server, or other templates or triggers), wrap an [exclusivelock] context around the WebDNA code which will be making the important exclusive changes.
Example WebDNA code:
Example WebDNA code:
[exclusivelock db=orders.db&db=lineitems.db&db=accesslog.db]
...search, delete, or modify any of orders.db, lineitems.db, or accesslog.db while being assured that no other threads can modify any of these databases until the closing /exclusivelock tag is reached.
[/exclusivelock]
The list of database names is first alphabetized so as to maintain a consistent locking order (a technique which prevents internal deadlocks), then each database lock is acquired one at a time until all locks are acquired, then the interior WebDNA is executed. If any lock cannot be acquired, the other databases are unlocked, and the interior WebDNA is not executed.