代码之家  ›  专栏  ›  技术社区  ›  hookenz

linux上的gcc与microsoft的关键部分是什么?

  •  6
  • hookenz  · 技术社区  · 14 年前

    EnterCriticalSection ExitCriticalSection

    GCC的等价物是什么?

    我看到周围提到 __sync_synchronize __scoped_lock

    事实上,我看到有人提到一些原子 __sync 函数以及一些 __atomic

    实际上我一直在用 __sync_fetch_and_add 为了我的原子增量 我应该用吗 __atomic_add_dispatch
    有什么区别?

    我应该用哪一种?是否有一些C++结构,我可以在GCC和Visual C++ 2010的最新版本中使用,因为我将编写一些跨平台代码。

    我看到boost有一些可用的功能,但由于各种原因,我不允许在windows下使用boost。

    4 回复  |  直到 10 年前
        1
  •  20
  •   Billy ONeal IS4    14 年前

    编辑:请参阅下面的第一条评论——显然Posix互斥与Win32关键部分相同,因为它们绑定到单个进程。

        2
  •  11
  •   Tutankhamen    11 年前

    点击此处: http://en.wikipedia.org/wiki/Critical_section

    /* Sample C/C++, Unix/Linux */
    #include <pthread.h>
    
    /* This is the critical section object (statically allocated). */
    static pthread_mutex_t cs_mutex =  PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
    
    void f()
    {
        /* Enter the critical section -- other threads are locked out */
        pthread_mutex_lock( &cs_mutex );
    
        /* Do some thread-safe processing! */
    
        /*Leave the critical section -- other threads can now pthread_mutex_lock()  */
        pthread_mutex_unlock( &cs_mutex );
    }
    
    int main()
    {
        f();
    
        return 0;
    }
    
        3
  •  2
  •   Gangadhar    14 年前

    EnterCriticalSection 我见过一个大型实现,其中提供了一组常见的api,这些api被有条件地编译为具有本机api(比如在AIX上的fetch\和\ add)或使用pthreads-win32api。 我曾经试着用 posix threads on win32 但遇到了一系列问题(但那是一个非常旧的版本)。现在是YMMV。

        4
  •  2
  •   Amith Chinthaka    10 年前

    如果您只为Windows平台开发程序,我认为最好的方法是使用win32api。否则,您可以使用Qt C++库(为此QtCar就足够了)。

    QMutex QMutexLocker 您还可以使用: QReadWriteLock