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

มัลติเธรดคือความสามารถของคอมพิวเตอร์หรือโปรแกรมในการทำงานพร้อมกันหรือแบบอะซิงโครนัสโดยใช้การประมวลผลหลายกระแสพร้อมกัน (โดยทั่วไปเรียกว่าเธรด)

12
หากฉันซิงโครไนซ์สองวิธีในคลาสเดียวกันพวกเขาสามารถทำงานพร้อมกันได้หรือไม่?
หากฉันซิงโครไนซ์สองวิธีในคลาสเดียวกันพวกเขาสามารถทำงานพร้อมกันบนวัตถุเดียวกันได้หรือไม่? ตัวอย่างเช่น: class A { public synchronized void methodA() { //method A } public synchronized void methodB() { // method B } } ฉันรู้ว่าฉันวิ่งไม่ได้ methodA()สองครั้งบนวัตถุเดียวกันในสองเธรดที่แตกต่างกัน สิ่งเดียวกันmethodB()ค่ะ แต่ฉันสามารถเรียกใช้methodB()เธรดอื่นขณะที่methodA()ยังทำงานอยู่ได้หรือไม่ (วัตถุเดียวกัน)

9
การสร้างคิวการบล็อค <T> ใน. NET?
ฉันมีสถานการณ์ที่ฉันมีหลายเธรดที่เพิ่มเข้ากับคิวและหลายเธรดที่อ่านจากคิวเดียวกัน หากคิวมาถึงขนาดเฉพาะเธรดทั้งหมดที่เติมคิวจะถูกบล็อกในการเพิ่มจนกว่ารายการจะถูกลบออกจากคิว วิธีแก้ปัญหาด้านล่างคือสิ่งที่ฉันใช้อยู่ตอนนี้และคำถามของฉันคือ: จะปรับปรุงได้อย่างไร มีวัตถุที่เปิดใช้งานลักษณะการทำงานนี้ใน BCL ที่ฉันควรใช้อยู่หรือไม่ internal class BlockingCollection&lt;T&gt; : CollectionBase, IEnumerable { //todo: might be worth changing this into a proper QUEUE private AutoResetEvent _FullEvent = new AutoResetEvent(false); internal T this[int i] { get { return (T) List[i]; } } private int _MaxSize; internal int MaxSize { get …

10
การเรียก IllegalMonitorStateException เมื่อรอ ()
ฉันใช้มัลติเธรดใน java สำหรับโปรแกรมของฉัน ฉันได้ทำงานด้ายประสบความสำเร็จ แต่เมื่อฉันใช้มันมีการขว้างปาThread.wait() java.lang.IllegalMonitorStateExceptionฉันจะทำให้เธรดรอจนกว่าจะได้รับการแจ้งเตือนได้อย่างไร


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

1
ทำไม“ ในขณะที่ (จริง)” ที่ไม่มี“ Thread.sleep” ทำให้เกิดการใช้ CPU 100% บน Linux แต่ไม่ใช่ใน Windows
ฉันได้สร้างโปรแกรมอย่างง่ายใน java: public static void main(String[] args) throws InterruptedException { while (true) ; } ถ้าฉันใช้สิ่งนี้บนเครื่อง Linux แสดงว่ามีการใช้งาน CPU 100% แต่ไม่ทำให้ระบบปฏิบัติการช้า อย่างไรก็ตามถ้าฉันใช้รหัสเดียวกันบน Windows มันจะแสดงเฉพาะการใช้งาน CPU ประมาณ 20% เท่านั้น ฉันใช้ Oracle JRE บน Windows และ OpenJDK 6 บน Linux ฉันสงสัยว่าเธรดตัวกำหนดตารางเวลาของ Windows จะสุ่มและ Linux ไม่มีหรือไม่

7
ใช้ C # Generic Timeout
ฉันกำลังมองหาความคิดที่ดีสำหรับการนำวิธีการทั่วไปไปใช้ในการเรียกใช้โค้ด (หรือผู้รับมอบสิทธิ์นิรนาม) บรรทัดเดียวด้วยการหมดเวลา TemperamentalClass tc = new TemperamentalClass(); tc.DoSomething(); // normally runs in 30 sec. Want to error at 1 min ฉันกำลังมองหาโซลูชันที่สามารถนำไปใช้อย่างหรูหราในหลาย ๆ ที่ที่โค้ดของฉันโต้ตอบกับโค้ดเจ้าอารมณ์ (ที่ฉันไม่สามารถเปลี่ยนแปลงได้) นอกจากนี้ฉันต้องการให้โค้ด "หมดเวลา" ที่ละเมิดมีการหยุดการทำงานเพิ่มเติมหากเป็นไปได้

5
C ++ 11 std :: threads vs เธรด posix
ทำไมฉันจึงควรเลือกอย่างใดอย่างหนึ่งในทางปฏิบัติ อะไรคือความแตกต่างทางเทคนิคยกเว้นstd::threadชั้นเรียน

4
std :: lock_guard หรือ std :: scoped_lock?
C ++ 17 แนะนำคลาสล็อคใหม่ที่เรียกว่าstd::scoped_lock. เมื่อพิจารณาจากเอกสารแล้วจะดูเหมือนกับstd::lock_guardคลาสที่มีอยู่แล้ว อะไรคือความแตกต่างและฉันควรใช้เมื่อใด?

10
รหัสเข้าร่วมหัวข้อนี้หมายความว่าอย่างไร
ในรหัสนี้ทั้งสองเข้าร่วมและทำลายหมายถึงอะไร t1.join()อะไรทำให้t2หยุดจนกว่าจะt1ยุติ? Thread t1 = new Thread(new EventThread("e1")); t1.start(); Thread t2 = new Thread(new EventThread("e2")); t2.start(); while (true) { try { t1.join(); t2.join(); break; } catch (InterruptedException e) { e.printStackTrace(); } }

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

12
ฉันจะยกเลิก / ยกเลิกภารกิจของ TPL ได้อย่างไร
ในหัวข้อฉันสร้างบางอย่าง System.Threading.Taskและเริ่มต้นแต่ละงาน เมื่อฉันทำ.Abort()เพื่อฆ่าเธรดงานจะไม่ถูกยกเลิก ฉันจะส่ง.Abort()ไปยังงานของฉันได้อย่างไร
156 c#  .net  multithreading  task  abort 

2
Python Threading อาร์กิวเมนต์
ฉันมีปัญหากับ Python ที่เธรดและส่งสตริงในอาร์กิวเมนต์ def processLine(line) : print "hello"; return; . dRecieved = connFile.readline(); processThread = threading.Thread(target=processLine, args=(dRecieved)); processThread.start(); โดยที่ dRecieved คือสตริงของหนึ่งบรรทัดที่อ่านโดยการเชื่อมต่อ มันเรียกฟังก์ชั่นที่เรียบง่ายซึ่ง ณ ตอนนี้มีงานพิมพ์เพียงหนึ่งงาน "hello" อย่างไรก็ตามฉันได้รับข้อผิดพลาดดังต่อไปนี้ Traceback (most recent call last): File "C:\Python25\lib\threading.py", line 486, in __bootstrap_inner self.run() File "C:\Python25\lib\threading.py", line 446, in run self.__target(*self.__args, **self.__kwargs) TypeError: processLine() takes exactly …


4
รายการมีความปลอดภัยต่อเธรดหรือไม่
.pop()ผมสังเกตเห็นว่ามันก็มักจะแนะนำให้ใช้คิวที่มีหลายกระทู้แทนของรายการและ เป็นเพราะรายการไม่ปลอดภัยสำหรับเธรดหรือด้วยเหตุผลอื่น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.