ctypes範例

使用這個模塊需要以下步驟:

  1. 加載動態鏈接庫shared_atomic.loaddll(),

    atomic = shared_atomic.loaddll()

  2. 在進程/線程之間共享ctypes

    v = multiprocessing.Value(ctypes.c_long, 100, lock=False)

    a = multiprocessing.Array(ctypes.c_long, 100, lock=False)

    如果只用多線程模式

    a = ctypes.c_long(100)

  3. 使用ctypes.byref得到指向共享亦是的指針

    aref = ctypes.byref(a, 0)

  4. 將指針傳給原子函數

    atomic.long_get_and_set(aref,ctypes.c_long(100))

    processlist = []

    for i in range(10000):

        processlist.append(Process(target=atomic.long_get_and_set, args=(aref,ctypes.c_long(100))))

    for i in range(10000):

        processlist[i].start()

    for i in range(10000):

        processlist[i].join()