Mon (simplifié) Le tableau se compose d'unMarquer un dossier comme « utilisé » pour soutenir multithreading
Id int identity(1,1),
File varchar(20),
FileProcessed bit
La logique est la suivante: mon application prend d'abord (l'ordre n'a pas d'importance) dossier, qui a Bit FileProcessed défini sur false. Ensuite, il traite le fichier et définit le bit FileProcessed sur true.
Maintenant, il peut arriver que le premier thread prenne un enregistrement avec Id 1 et en le traitant, un autre thread prend le même enregistrement avec Id 1 (car il n'est pas market comme traité).
Quelle est la meilleure façon, pour soutenir miltithreading dans cet exemple?
EDIT: J'utilise SQL Sever 2005 EDIT2: Traitement du fichier peut prendre beaucoup de temps, donc je ne veux pas verrouiller la table tout en attendant
+1 Meilleure réponse jusqu'à présent. Recommande de stocker un identifiant unique de l'instance effectuant le traitement sur la ligne. Quand les choses tournent mal (et c'est le cas, bien sûr), il peut être très utile de savoir * quelle * instance était censée traiter cette ligne, peut-être de la déverrouiller parce que l'instance est allée à pied. :-) –
@OP: J'ai transféré mon commentaire à une réponse comme demandé, mais j'utiliserais vraiment l'approche de Damien où vous le pouvez. :-) –
peut vouloir utiliser aussi READPAST pour que d'autres puissent traiter la file d'attente aussi ... –