ไม่ใช่เรื่องที่ไม่สมควรถาม มีหลายกรณีที่วิธีการที่อาจทำให้เกิดปัญหาด้านความปลอดภัยของเธรดร่วมกับวิธีอื่น ๆ นั้นปลอดภัยหากเป็นวิธีเดียวที่เรียกว่า
อย่างไรก็ตามนี่ไม่ใช่กรณีอย่างชัดเจนเมื่อคุณพิจารณารหัสที่แสดงในตัวสะท้อน:
public void Add(T item)
{
if (this._size == this._items.Length)
{
this.EnsureCapacity(this._size + 1);
}
this._items[this._size++] = item;
this._version++;
}
แม้ว่าจะEnsureCapacityอยู่ในเธรดที่ปลอดภัย (และแน่นอนที่สุดก็คือไม่) แต่โค้ดด้านบนนั้นจะไม่ปลอดภัยต่อเธรดอย่างชัดเจนเมื่อพิจารณาถึงความเป็นไปได้ของการโทรพร้อมกันไปยังตัวดำเนินการที่เพิ่มขึ้นทำให้เกิดการเขียนผิดพลาด
ไม่ว่าจะเป็นการล็อกใช้ ConcurrentList หรืออาจใช้คิวที่ไม่มีการล็อกเป็นสถานที่ที่หลายเธรดเขียนถึงและอ่านจากมันไม่ว่าจะโดยตรงหรือโดยการกรอกรายการด้วย - หลังจากที่พวกเขาทำงานเสร็จแล้ว (ฉันสมมติว่า การเขียนพร้อมกันหลายรายการตามด้วยการอ่านแบบเธรดเดียวเป็นรูปแบบของคุณที่นี่โดยตัดสินจากคำถามของคุณเนื่องจากเป็นอย่างอื่นฉันไม่สามารถดูได้ว่าเงื่อนไขที่Addวิธีการเดียวที่เรียกว่าสามารถใช้ประโยชน์ได้อย่างไร)