初步交易:MySQL的:多個線程之間
我有保持約100線程的線程池的應用程序。每個線程可以在新任務取代之前持續約1-30秒。當一個線程結束時,該線程幾乎總會導致在表中插入1-3條記錄,該表由所有線程使用。目前,還沒有交易支持,但我現在試圖補充說明。另外,有問題的表是InnoDB。所以......
目標
我想要實現這個交易。該事務是否提交或回滾的規則駐留在主線程中。基本上有一個簡單的函數將返回一個布爾值。
- 我可以通過多個連接實現事務嗎?
- 如果不是,多個線程可以共享相同的連接嗎? (注意:這裏有很多插入,這是一個要求)。
也許,我想我可能會重新考慮這一點,只需讓線程在主線程的測試完成後等待完成即可。 – Zombies 2010-03-22 21:27:30
只是一個念頭,沒有測試:如果你自己做了'start_transaction()'和'commit()''''rollback()'函數,並且你在'start_transaction()'中鎖定了一個互斥鎖,結束時,交易將更安全地在線程中使用。我不會說它會起作用,因爲它來自不同的連接。它只是有時你在線程中開始交易,並且你依賴它們是原子的。還要注意,mysql sais一次只有一個查詢應該在所有線程中運行。這包括從查詢的運行到結果的完整獲取。 – NickSoft 2013-02-15 13:10:22
通過連接進行通信需要序列化。一種方法是擁有專用的通信線程,並讓其他線程完成所需的任何工作,然後將結果傳遞給通信線程,從而將語句序列化。 – 2013-11-22 15:31:33