คำถามติดแท็ก race-condition

18
สภาพการแข่งขันคืออะไร?
เมื่อเขียนแอปพลิเคชันแบบมัลติเธรดหนึ่งในปัญหาที่พบบ่อยที่สุดคือสภาพการแข่งขัน คำถามของฉันต่อชุมชนคือ: สภาพการแข่งขันคืออะไร? คุณตรวจจับพวกมันได้อย่างไร คุณจัดการกับมันอย่างไร สุดท้ายคุณจะป้องกันไม่ให้เกิดขึ้นได้อย่างไร

8
การตรวจสอบเธรดปลอดภัยหรือไม่
ฉันรู้ว่าการดำเนินการผสมเช่นi++ไม่ปลอดภัยตามที่พวกเขาเกี่ยวข้องกับการดำเนินงานหลาย ๆ แต่การตรวจสอบการอ้างอิงด้วยตัวเองเป็นการดำเนินการที่ปลอดภัยของเธรดหรือไม่ a != a //is this thread-safe ฉันพยายามเขียนโปรแกรมนี้และใช้หลายเธรด แต่ก็ไม่ได้ล้มเหลว ฉันเดาว่าฉันไม่สามารถจำลองการแข่งขันบนเครื่องของฉันได้ แก้ไข: public class TestThreadSafety { private Object a = new Object(); public static void main(String[] args) { final TestThreadSafety instance = new TestThreadSafety(); Thread testingReferenceThread = new Thread(new Runnable() { @Override public void run() { long countOfIterations = …

5
เหตุใดโค้ดที่กลายพันธุ์ของตัวแปรที่ใช้ร่วมกันระหว่างเธรดจึงไม่ได้รับผลกระทบจากสภาวะการแข่งขัน
ฉันใช้ Cygwin GCC และเรียกใช้รหัสนี้: #include <iostream> #include <thread> #include <vector> using namespace std; unsigned u = 0; void foo() { u++; } int main() { vector<thread> threads; for(int i = 0; i < 1000; i++) { threads.push_back (thread (foo)); } for (auto& t : threads) t.join(); cout << u << …

5
จะรับ ID แถวที่แทรกล่าสุดจากฐานข้อมูล WordPress ได้อย่างไร
ปลั๊กอิน WordPress ของฉันมีตารางที่มีช่องคีย์หลักAUTO_INCREMENT ที่เรียกว่า ID เมื่อแทรกแถวใหม่ลงในตารางฉันต้องการรับค่า ID ของการแทรก คุณลักษณะคือการใช้ AJAX เพื่อโพสต์ข้อมูลไปยังเซิร์ฟเวอร์เพื่อแทรกลงใน DB ID แถวใหม่จะถูกส่งคืนในการตอบสนอง AJAX เพื่ออัพเดตสถานะไคลเอ็นต์ เป็นไปได้ว่าไคลเอนต์หลายรายกำลังโพสต์ข้อมูลไปยังเซิร์ฟเวอร์ในเวลาเดียวกัน ดังนั้นฉันต้องแน่ใจว่าคำขอ AJAX แต่ละรายการได้รับ ID แถวใหม่ที่แน่นอนในการตอบสนอง ใน PHP มีเมธอดที่เรียกว่าmysql_insert_idสำหรับฟีเจอร์นี้ แต่จะใช้ได้กับสภาพการแข่งขันก็ต่อเมื่ออาร์กิวเมนต์เป็นlink_identifierของการดำเนินการล่าสุด การดำเนินการกับฐานข้อมูลของฉันอยู่ที่ $ wpdb วิธีแยกlink_identifierจาก $ wpdb เพื่อให้แน่ใจว่า mysql_insert_id ใช้งานได้ มีวิธีอื่นในการรับ id แถวสุดท้ายจาก $ wpdb หรือไม่? ขอบคุณ.

2
WebView พร้อมสำหรับ snapshot เมื่อใด ()
JavaFX เอกสารรัฐที่WebViewพร้อมเมื่อWorker.State.SUCCEEDEDถึงแต่ถ้าคุณรอในขณะที่ (เช่นAnimation, Transition, PauseTransitionฯลฯ ) หน้าว่างที่มีการแสดง สิ่งนี้ชี้ให้เห็นว่ามีเหตุการณ์ที่เกิดขึ้นภายใน WebView ที่พร้อมสำหรับการดักจับ แต่มันคืออะไร มีตัวอย่างโค้ดมากกว่า 7,000 รายการใน GitHub ที่ใช้SwingFXUtils.fromFXImageแต่ส่วนใหญ่ดูเหมือนว่าไม่เกี่ยวข้องกับWebViewมันเป็นแบบอินเทอร์แอคทีฟ (มาสก์มนุษย์ที่มีสภาพการแข่งขัน) หรือใช้การเปลี่ยนแปลงตามอำเภอใจ ฉันได้พยายาม: ฟังchanged(...)จากภายในส่วนWebViewข้อมูล ( DoublePropertyใช้คุณสมบัติความสูงและความกว้างObservableValueซึ่งสามารถตรวจสอบสิ่งเหล่านี้ได้) v ไม่สามารถทำงานได้ บางครั้งค่าดูเหมือนจะเปลี่ยนจากรูทีนการระบายสีซึ่งนำไปสู่เนื้อหาบางส่วน บอกอะไร ๆ ทุกอย่างไปrunLater(...)ที่ FX Application Thread techniques เทคนิคหลายอย่างใช้สิ่งนี้ แต่การทดสอบหน่วยของฉันเอง (เช่นเดียวกับข้อเสนอแนะที่ยอดเยี่ยมจากนักพัฒนาอื่น ๆ ) อธิบายว่าเหตุการณ์มักจะอยู่ในเธรดที่ถูกต้องและการโทรนี้ซ้ำซ้อน สิ่งที่ดีที่สุดที่ฉันสามารถนึกได้ก็คือการเพิ่มความล่าช้าเพียงพอผ่านการเข้าคิวที่ใช้งานได้สำหรับบางคน การเพิ่มผู้ฟัง / ทริกเกอร์ DOM หรือทริกเกอร์ / ทริกเกอร์ JavaScript ให้กับ WebView JavaScript …

3
รายการ :: empty () พฤติกรรมแบบมัลติเธรด?
ฉันมีรายการที่ฉันต้องการให้เธรดต่าง ๆ หยิบองค์ประกอบ เพื่อหลีกเลี่ยงการล็อก mutex ที่ป้องกันรายการเมื่อว่างฉันempty()จะตรวจสอบก่อนล็อก ไม่เป็นไรหากการโทรไปlist::empty()ไม่ถูกต้อง 100% ของเวลา ฉันเพียงต้องการหลีกเลี่ยงการหยุดทำงานหรือรบกวนการทำงานพร้อมกันlist::push()และการlist::pop()โทร ฉันปลอดภัยempty()ไหมที่จะสมมติว่า VC ++ และ Gnu GCC บางครั้งจะผิดพลาดและไม่มีอะไรเลวร้ายไปกว่านี้ if(list.empty() == false){ // unprotected by mutex, okay if incorrect sometimes mutex.lock(); if(list.empty() == false){ // check again while locked to be certain element = list.back(); list.pop_back(); } mutex.unlock(); }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.