scope(exit)

MM MM_member at pathlink.com
Fri May 12 21:24:05 PDT 2006


In article <e43ilf$141k$1 at digitaldaemon.com>, MM says...
>
>
>>Personally, I find the basic guarantee to be of very limited use.  For 
>>most operations, the weak guarantee seems far more appropriate, and I 
>>believe it is reasonable to expect that of the lock function.  In other 
>>words, if the lock function fails then I would expect m to be in the 
>>state it was in prior to the lock call.  Further, it's possible that 
>>unlock might consider being asked to unlock a mutex that the calling 
>>thread doesn't own to be an error condition, which may result in an 
>>exception being generated.  Therefore, if lock fails and throws and 
>>exception and scope(exit) unlock(m) therefore fails and throws an 
>>exception as well, the application will terminate because it has two 
>>exceptions in flight simultaneously.  Therefore:
>>
>>     lock(m);
>>     scope(exit) unlock(m);
>>
>>is preferred because unlock will only be called if a lock was 
>>successfully obtained, and will be called regardless of whether the 
>>following code generates an error or completes successfully.
>>
>>
>>Sean
>
>Lock && unlock could ofcourse be any arbitrary function.. thus I was asking
>myself, why use the weak guarantee? When you take the change on a fault in lock
>at about the same as unlock your reasoning would be sound. But most of the
>time(in my code:) the 'unlock' function is far less complex than the 'lock'
>function.
>Is it then still better to use the weak guarantee?(not a retoric question... :)
>
>

change should be chance



More information about the Digitalmars-d mailing list