Ich habe eine 1000 * 1000 Tabelle und ein paar Threads arbeiten daran. Jeder Thread arbeitet unabhängig von einem bestimmten Teil der Tabelle und seine "Arbeit" bewegt sich mit jeder Iteration auf dem Tisch.Mehrere Threads Zugriff in Java
Anstatt die gesamte Tabelle für einen Thread zu sperren, während die anderen warten, möchte ich nur nur die benötigten Zellen für jeden Thread sperren. Also ich suche, um den benötigten "Block" von Zellen für jeden Thread zu sperren.
Meine Idee ist es, eine Sperrtabelle wie: Lock [][]gridLock=new Lock[1000][1000];
zu erstellen und die benötigten Zellen für jeden Thread zu sperren.
Dies würde mit einer gridlock(x,y,diameter)
und gridUnlock(x,y,diameter)
Methoden zum Sperren/Entkoppeln der benötigten Zellen gehen.
Gibt es bessere Möglichkeiten, dies zu erreichen, oder ist diese Methode geeignet?
Natürlich ist es möglich, aber Sie sollten viel deutlicher angeben, was Ihre Threads tun - warum nicht jeden Thread auf einer Zeile des Tisches arbeiten lassen, und das ist es, keine Notwendigkeit für irgendeine Verriegelung. – luk2302
Eine Million Schlösser werden wahrscheinlich ziemlich umständlich werden. – Kayaman
Zu breit. Erfahren Sie mehr über Zugangsmuster, Zugangskosten und welche Art von Datenorganisation "Tabelle" hat. Ihr Text schlägt vor * array * oder * grid *, nicht Tabelle. Sehr wichtig ist auch, die Zugriffsarten zu bestimmen (Lesen/Schreiben). Ihr Ansatz mit 1 Million Locks wird höchstwahrscheinlich so schrecklich funktionieren, dass Single Threading schneller wäre. Ganz zu schweigen von seinem enormen Deadlocking-Potenzial. Die Sperrung kann möglicherweise größtenteils dadurch vermieden werden, dass einfach passendere Datenstrukturen ausgewählt werden. TL: DR: Es gibt viele Werkzeuge im Schuppen, aber ohne das Problem zu kennen, kann keine gute Wahl getroffen werden. – Durandal