On 12 Feb 09, at 01:25, Oleg Krupnov wrote:
This seems a trivial question for a multi-threading app, but I haven't
been successful in implementing this in Cocoa. I've got deadlocks and
strange logs for seemingly no reason.
<snip>

// the operation object eventually checks the -isCancelled flag and
then sends -unlock to the lock, and its thread exits.

This is not an appropriate use of locks, and the runtime error you're getting ("lock unlocked from thread which did not lock it") is a sign of this misuse. Indeed, the design you've described actually contains a subtle synchronization error that could cause deadlock if your code attempts to cancel a thread before it has fully initialized.

As a general point, though, locks are designed for mutual exclusion on shared resources, not inter-thread signalling. Use NSCondition for this sort of communication; alternatively, you may want to investigate pthread_cancel for a more specific solution.
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to