2 Stimmen

Wie synchronisiert man einige Threads?

Ich tue Zahlung Online-System mit asp.net mvc1.0, wie kann ich tun, damit nur eine Person etwas zu kaufen, wenn es auf Lager ist nur ein. In addtion Ich verwende andere Zahlungssystem (wie ebay) in diesem System.Ich meine, wenn ein Produkt auf Lager ist nur ein, und mehr als eine Person, um es in einem Moment zu kaufen, wie kann ich tun, um eine Person zu ermöglichen, kann es Erfolg kaufen und andere kann es nicht mehr kaufen.

1voto

Jared Peless Punkte 1120

Sie werden wahrscheinlich Datenbanktransaktionen verwenden müssen, um Ihre Bestellungen zu bearbeiten. Dabei geht es nicht nur um das Sperren eines Objekts (das in diesem Fall ein statisches Objekt sein müsste, damit es von allen Web-Benutzern gemeinsam genutzt werden kann), sondern um den Zugriff auf einen Auftrag in seiner Gesamtheit. Transaktionen sind das, was Sie verwenden müssen.

Außerdem ist es nicht klar, wenn Sie sagen: "Ich verwende andere Zahlungsmittel in diesem System". Das hat keinen Einfluss auf die transaktionale Verwaltung der Bestände für den Verkauf.

0voto

swapneel Punkte 3011

Um nur einem Thread den Zugriff auf die offizielle Methode zu ermöglichen, können Sie den Schlüssel Lock verwenden.

lock (myObj)
{
}

Wenn Sie nach etwas mehr suchen, brauchen Sie mehr Kontext, um es zu verstehen.

0voto

Massimo Zerbini Punkte 3015

Sie müssen Ihrem System eine gleichzeitige Zugriffskontrolle hinzufügen. Sie können zum Beispiel diesen einfachen Algorithmus implementieren:

  1. Überprüfen Sie die Menge der Objekte, die Sie in Ihrem Geschäft verkaufen möchten.
  2. Verringern Sie die Menge um die Anzahl der Objekte, die Sie verkaufen möchten
  3. Bezahlen Sie die Objekte
  4. wenn die Zahlung in Ordnung ist, wird die Transaktion beendet
  5. wenn die Zahlung fehlschlägt, führen Sie die Transaktion zurück, erhöhen Sie die Menge und geben Sie das Geld zurück ;)

Wichtig ist Punkt 2, die Aktualisierung der Elementmenge im Speicher mit Hilfe eines optimistischen Überprüfungsalgorithmus. Schreiben Sie zum Beispiel in die WHERE-Bedingung Ihrer SQL-Operation den Wert der Menge, den Sie in Punkt 1 gelesen haben. Wenn jemand diesen Wert ändert, schlägt die Aktualisierung fehl und die Verkaufsoperation muss unterbrochen werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X