<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=22566&amp;view=findpost&amp;p=166992</guid>
        <pubDate>Fri, 11 Oct 2002 18:17:08 +0000</pubDate>
        <title>Проблема блокировки DBM файла в Perl</title>
        <link>https://forum.sources.ru/index.php?showtopic=22566&amp;view=findpost&amp;p=166992</link>
        <description><![CDATA[Andrey_3: OC - Linux.<br>]]></description>
        <author>Andrey_3</author>
        <category>Perl</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=22566&amp;view=findpost&amp;p=166991</guid>
        <pubDate>Fri, 11 Oct 2002 17:07:03 +0000</pubDate>
        <title>Проблема блокировки DBM файла в Perl</title>
        <link>https://forum.sources.ru/index.php?showtopic=22566&amp;view=findpost&amp;p=166991</link>
        <description><![CDATA[uhri: Под какой Осью код работает, если под линухой, то не знаю. Если под виндой, то там в документации по перлу есть указание, что блокировка вообще не возможна. Правда не знаю под какой версией винды, может ошибаюсь]]></description>
        <author>uhri</author>
        <category>Perl</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=22566&amp;view=findpost&amp;p=166990</guid>
        <pubDate>Thu, 10 Oct 2002 12:01:18 +0000</pubDate>
        <title>Проблема блокировки DBM файла в Perl</title>
        <link>https://forum.sources.ru/index.php?showtopic=22566&amp;view=findpost&amp;p=166990</link>
        <description><![CDATA[Andrey_3: Здравствуйте, коллеги!<br><br>Для монопольной блокировки DBM файлов до настоящего<br>времени я пользовался известным &quot;классическим&quot; приемом,<br>основанным на flock() и предлагаемым в различной литературе<br>(в том числе в книгах Camel book и Perl Cookbook):<br><br>use MLDBM qw(DB_File);<br>use Fcntl qw(:DEFAULT :flock);<br>...<br>$db=tie(\%db, 'MLDBM', $file, O_RDWR) &#124;&#124; die $!;<br>$fd=$db-&gt;fd;<br>open(DB_FH, &quot;+&lt;&amp;=$fd&quot;) &#124;&#124; die $!;<br>flock (DB_FH, LOCK_EX) &#124;&#124; die $!;<br>$db{$key}=$reference;<br>$db-&gt;sync;<br>undef $db;<br>untie \%db;<br>close(DB_FH);<br>...<br><br>Однако, пытаясь более глубоко разобраться в вопросах<br>блокировки DBM файлов, я обнаружил ряд важных, но не<br>до конца понятных мне моментов.<br><br>1) В документации к модулю DB_File указывается, что<br>применение приведенного подхода с версиями до 1.72<br>этого модуля может приводить к нарушению целостности<br>базы данных. Предлагается вовсе отказаться от flock()<br>и воспользоваться модулями Tie::DB_Lock, Tie::DB_LockFile<br>или DB_File::Lock.<br><br>2) В документации к mod_perl в разделе &quot;mod_perl and dbm files&quot;<br>(http://perl.apache.org/docs/1.0/guide/dbm.html) более<br>детально обсуждается эта проблема и прямо говорится:<br>&quot;The suggested locking methods in the Camel book<br>and DB_File man page (before version 1.72, fixed in 1.73)<br>are flawed.&quot;<br> &nbsp; Там же наряду с Tie::DB_Lock, Tie::DB_LockFile,<br>DB_File::Lock и DB_File::Lock2 рассматриваются в том числе<br>и такие варианты решения проблемы блокировки:<br><br>Similar for the exclusive (EX), write access:<br><br>flock FLOCK_EX &lt;===== start critical section<br>tie()<br>write...<br>sync()<br>untie()<br>flock FLOCK_UN &lt;===== end critical section<br><br>3) Для модуля MLDBM, который я использую, также<br>разработан модуль MLDBM::Sync для решения вопроса<br>блокировки DBM файлов.<br><br>В связи со всем этим у меня остаются такие вопросы:<br><br>- будет ли корректно работать приведенный мной <br>&quot;классический&quot; (основанный на flock() ) подход к<br>блокировке DBM файлов с версиями модуля DB_File старше<br>1.72 (например, у меня установлена 1.801)?;<br><br>- будет ли этот подход корректно работать в моем случае,<br>то есть при использовании модуля MLDBM qw(DB_File)<br>(версия модуля 2.0)?;<br><br>- насколько жизнеспособен вариант блокировки, описанный<br>в 2), когда flock() стоит перед tie()?;<br><br>- действительно ли, если возможно, стоит совсем<br>отказаться от вариантов с flock() и использовать упомянутые<br>новые модули для решения проблем блокировки?<br><br><br>Отзовитесь, pls, кто сталкивался с этими вопросами.<br><br>Спасибо!<br><br>]]></description>
        <author>Andrey_3</author>
        <category>Perl</category>
      </item>
	
      </channel>
      </rss>
	