Magnus Hagander <mag...@hagander.net> wrote:
 > On Fri, Jan 1, 2010 at 20:45, Magnus Hagander <mag...@hagander.net> wrote:
 > > On Fri, Dec 4, 2009 at 11:42, Tsutomu Yamada <tsut...@sraoss.co.jp> wrote:
 > >>
 > >> 2) use appropriate macro and datatypes for Windows API.
 > >>   enables more than 32bits shared memory.
 > >
 > > Are you sure this one should use __noop, and not __nop?
 > >
 > > __noop: http://msdn.microsoft.com/en-us/library/s6btaxcs.aspx
 > > __nop: http://msdn.microsoft.com/en-us/library/aa983381.aspx
 > >
 > > I think __nop is what we want?
 > >
 > > Also, that turns it into "nop" and not "rep nop", no?
 > 
 > I did some more research, and __nop() is at least closer than
 > __noop(), but it's still not the same.
 > 
 > 
 > > Should we perhaps instead use __yield, per:
 > > http://msdn.microsoft.com/en-us/library/2b2h26kx.aspx
 > 
 > On further reading, __yield() is only available on Itanium.


This spinlock code was came from below.
http://archives.postgresql.org/pgsql-hackers/2008-07/msg00307.php

Sorry, I didn't care which macro was better.

I found 'YieldProcessor' in MSDN.
http://msdn.microsoft.com/en-us/library/ms687419%28VS.85%29.aspx

YieldProcessor was defined in "winnt.h".
The definition changes depending on architecture and compiler version.

__asm { rep nop };
__mm_pause();
__yield();

YieldProcessor become "__mm_pause()" in _AMD64_.
So "__mm_pause()" is better?

// test program
#include <windows.h>

main()
{
    YieldProcessor();
}
// end
// cl /E test.c > out.i
// tail out.i
// # I recommend redirecting to file, The output become large.


Tsutomu Yamada
SRA OSS, Inc. Japan

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to