Вам необходимо убедиться, что программа, выполняющая запись и чтение, имеет правильный набор FileShare, поэтому вам нужно передать FileShare.Read в конструктор FileStream для написания программы:
new FileStream("C:/Users/phil/tmp.txt",FileMode.Create,FileAccess.Write,FileShare.Read)
Вы также должны убедиться, что у вас включена программа FileShare.ReadWrite для программы, которая только читает ее:
new FileStream("C:/Users/phil/tmp.txt",FileMode.Open,FileAccess.Read,FileShare.ReadWrite)
Это приведет к тому, что конструкторы FileStream установят правильные блокировки для самого файла.
Подробнее о конструкторе можно узнать в msdn: http://msdn.microsoft.com/en-us/library/5h0z48dh.aspx (есть и другие перегрузки, которые также принимают параметр FileShare)