คำถามติดแท็ก concurrenthashmap

5
การทำซ้ำ ConcurrentHashMap ทำให้เธรดปลอดภัยหรือไม่
ใน javadoc สำหรับConcurrentHashMapมีดังต่อไปนี้: การดำเนินการดึงข้อมูล (รวมทั้งรับ) โดยทั่วไปจะไม่บล็อกดังนั้นอาจทับซ้อนกับการดำเนินการอัปเดต (รวมถึงการย้ายและลบ) การดึงข้อมูลสะท้อนถึงผลลัพธ์ของการดำเนินการอัปเดตล่าสุดที่เสร็จสิ้นเมื่อเริ่มมีอาการ สำหรับการดำเนินการรวมเช่น putAll และ clear การดึงข้อมูลพร้อมกันอาจสะท้อนถึงการแทรกหรือการลบบางรายการเท่านั้น ในทำนองเดียวกัน Iterators และ Enumerations จะส่งคืนองค์ประกอบที่สะท้อนสถานะของตารางแฮช ณ จุดหนึ่งหรือตั้งแต่การสร้างตัววนซ้ำ / การแจงนับ พวกเขาจะไม่โยน ConcurrentModificationException อย่างไรก็ตามตัววนซ้ำได้รับการออกแบบให้ใช้งานได้ครั้งละหนึ่งเธรดเท่านั้น มันหมายความว่าอะไร? จะเกิดอะไรขึ้นถ้าฉันพยายามทำซ้ำแผนที่ด้วยสองเธรดในเวลาเดียวกัน จะเกิดอะไรขึ้นถ้าฉันใส่หรือลบค่าออกจากแผนที่ในขณะที่วนซ้ำ

7
เหตุใด ConcurrentHashMap จึงป้องกันคีย์และค่าว่าง
JavaDoc ของConcurrentHashMapพูดว่า: เหมือนHashtableแต่แตกต่างจากHashMapชั้นนี้ไม่ได้ช่วยให้nullเพื่อนำมาใช้เป็นคีย์หรือค่า คำถามของฉัน: ทำไม คำถามที่สอง: ทำไมไม่Hashtableอนุญาตให้เป็นโมฆะ ฉันใช้ HashMaps จำนวนมากเพื่อจัดเก็บข้อมูล แต่เมื่อเปลี่ยนเป็นConcurrentHashMapฉันมีปัญหาหลายครั้งเพราะ NullPointerExceptions

3
การใช้งาน gcc std :: unordered_map ช้าหรือไม่ ถ้าเป็นเช่นนั้น - ทำไม?
เรากำลังพัฒนาซอฟต์แวร์สำคัญที่มีประสิทธิภาพสูงใน C ++ ที่นั่นเราต้องมีแผนที่แฮชพร้อมกันและนำไปใช้ std::unordered_mapดังนั้นเราจึงเขียนมาตรฐานที่จะคิดออกเท่าไหร่ช้ากว่าแผนที่กัญชาพร้อมกันของเราจะถูกเมื่อเทียบกับ แต่std::unordered_mapดูเหมือนว่าจะไม่น่าเชื่อช้า ... ดังนั้นนี้เป็นของเราไมโครมาตรฐาน (สำหรับแผนที่พร้อมกันเรากลับกลายเป็นหัวข้อใหม่เพื่อให้แน่ใจว่าการล็อคไม่ได้รับการปรับให้เหมาะสมออกไปและทราบว่าฉันไม่เคย Inser 0 เพราะผมยังมาตรฐานด้วยgoogle::dense_hash_map, ซึ่งต้องการค่า null): boost::random::mt19937 rng; boost::random::uniform_int_distribution<> dist(std::numeric_limits<uint64_t>::min(), std::numeric_limits<uint64_t>::max()); std::vector<uint64_t> vec(SIZE); for (int i = 0; i < SIZE; ++i) { uint64_t val = 0; while (val == 0) { val = dist(rng); } vec[i] = val; } std::unordered_map<int, long …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.