> On 7 Oct 2016, at 15:14, Quincey Morris <[email protected]>
> wrote:
>
> On Oct 7, 2016, at 00:19 , Gerriet M. Denkmann <[email protected]> wrote:
>>
>> So what is the proper way to count something atomicly and undeprecatedly?
>
> One straightforward way is to use dispatch_semaphore. IIRC it’s lightweight
> unless it blocks (that is, unless its count is zero when you wait), so it’s
> good for this situation where actual contention is rare (assuming actual
> contention is rare).
Is there a better way than this:
dsema = dispatch_semaphore_create( 0 );
some loop to be counted
{
dispatch_semaphore_signal(dsema);
….
}
NSUInteger counter = 0;
for(;;)
{
long a = dispatch_semaphore_wait(dsema, DISPATCH_TIME_NOW);
if ( a != 0 ) break;
counter++;
};
Anyway: to count 20 mio things takes an overhead of ca. 0.5 sec for all of:
OSAtomicIncrement32 — deprecated in macOS 12
atomic_fetch_add_explicit
dispatch_semaphore_signal
IncrementAtomic— deprecated in macOS 8 has overhead of 2.7 sec
> If performance is not a consideration, you can use @synchronized instead.
> It’s marginally easier to use.
Here the overhead is 2 minutes = 240 times the other counting methods.
Performance is not a consideration, but this is just too much.
Thanks for your help!
Kind regards,
Gerriet.
_______________________________________________
Cocoa-dev mailing list ([email protected])
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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to [email protected]