I'm uring StreamReader
читать/писать из файла в два потока, читать в одном и писать в другом. Я хочу, чтобы эти два не происходили одновременно. Какую блокировку я должен использовать? Я посмотрел несколько примеров, но они использовали FileStream.Lock
, и я не уверен, могу ли я использовать это с StreamReader
, поэтому, пожалуйста, уточните.C# file read/write lock
ответ
Вы можете создать свой собственный замок:
class Example
{
private static readonly object SyncRoot = new object();
void ReadOrWrite()
{
lock(SyncRoot)
{
// Perform a read or write
}
}
}
следует использовать вместо mutex? Я не знаю разницы ... – prongs
symcroot может быть просто 'Object'? Я имею в виду не какой-то подкласс объекта? – prongs
он статичен, поэтому он должен обрабатывать несколько потоков. он не должен быть подклассифицирован; единственная цель объекта SyncRoot должна быть заблокирована – Didaxis
вы можете использовать семафор
http://msdn.microsoft.com/en-us/library/system.threading.semaphore.aspx
Семафор будет работать, но если порядок, в котором происходят события, важен, при использовании семафора нет очереди. Нет гарантий, какой поток получит блокировку после ее выпуска. – Darthg8r
В дополнение к блокировке самого файла, используйте ключевое слово "блокировки". В противном случае, вы будете бросать исключение при попытке работать с заблокированным файлом
private object lockObject = new Object();
// Code in thread that reads
lock(lockObject)
{
// Open the file and do something
// Be sure to close it when done.
}
// Somewhere else in another thread
lock(lockObject)
{
// Open the file for writing and do somethign with it
// Be sure to close it when done.
}
- 1. c windows multithread file lock
- 2. Reentrant readwrite lock synchronization on isWriteLocked
- 3. Windows File/Directory Lock
- 4. FileStream ReadWrite в C#
- 5. C++ Lock File Windows Режим блокировки
- 6. Lock rptdesign file
- 7. SLF Release File Lock
- 8. PERL POE ReadWrite Wheel File IO Пример?
- 9. WPF Image tooltip lock file
- 10. C Reader Writer Thread Lock Lock Unlock
- 11. Обменник ReadWrite не работает (C# .NET)
- 12. Threading C++ lock
- 13. C# FileSystemWatcher lock folder
- 14. lock (object) in C#
- 15. C# threading - Lock Object
- 16. C# Lock WinForm Controls
- 17. Метод lock in C#
- 18. C# Threading + lock weird
- 19. Ярмарка Reentrant Lock C++
- 20. C# lock (this) method
- 21. Демонстрация C# Convoy Lock
- 22. C# Lock Threading Issue
- 23. ReadWrite TMemoryStream от BLOB
- 24. Безопасная блокировка ReadWrite Java?
- 25. Nuke - Matrix4 lock lock lock Z rotation
- 26. Java lock lock
- 27. Java многопоточность смешивает текст в нерабочем режиме file-lock
- 28. C# lock (mylocker) не работает
- 29. C# lock table for bulkcopy
- 30. Коллекция Named Lock в C#?
просто любопытные ..но у них должны быть в разных потоках .. и у вас есть образец кода, который вы используете – MethodMan
@DJKRAZE да, они должны быть в разных потоках. Поток, который пишет, на самом деле извлекает некоторые данные с удаленного сервера и добавляет некоторые из них в файл. – prongs
Вы не можете использовать StreamReader для записи в файл. Конечно, вы имели в виду что-то еще, но нет смысла угадывать, что вам нужно что-то большее, чем простой * замок *. –