There should be no need to lock yourselves.What error did you get when you tried that?
On Tue, May 19, 2009 at 8:22 PM, nabils <[email protected]> wrote: > > Hi Ayende, > > After a little little tinkering I managed to get it working with > multiple threads, only with a lock when writing to the pht. I guess it > doesn't handle the locking internally!!! I hope I'm using it in the > correct way. Just wanted a quick yes/no confirmation from you before I > try implementing it on a large system. Sample code is below. > > Thanks > > using System; > using System.Text; > using System.Threading; > using Rhino.PersistentHashTable; > > namespace ConsoleApplication1 > { > public class Program > { > public static object LockObj = new object(); > public static PersistentHashTable Pht = new PersistentHashTable > ("esent.Test"); > > public static void Read() > { > try > { > for (int j = 0; j < 50000; j++) > { > ReadFromPht(Pht); > } > } > finally > { > if (Pht != null) > Pht.Dispose(); > } > } > > public static void Write() > { > try > { > for (int j = 0; j < 50000; j++) > { > WriteToPht(Pht); > } > } > finally > { > if (Pht != null) > Pht.Dispose(); > } > } > > private static void Main(string[] args) > { > Pht.Initialize(); > > new Thread(Read).Start(); > new Thread(Read).Start(); > new Thread(Write).Start(); > new Thread(Write).Start(); > new Thread(Read).Start(); > > Console.ReadLine(); > } > > private static void ReadFromPht(PersistentHashTable pht) > { > var guid = "4641b72d-1fed-41fe-8670-6c7d22e9eb5a"; > > pht.Batch(actions => > { > var str = Encoding.ASCII.GetString > (actions.Get(new GetRequest {Key = guid})[0].Data); > Console.WriteLine(str); > Console.WriteLine("Length is: " + > actions.Get(new GetRequest { Key = guid })[0].Version.Number); > actions.Commit(); > }); > > Console.WriteLine(guid); > } > > private static void WriteToPht(PersistentHashTable pht) > { > var guid = Guid.NewGuid().ToString(); > > lock (LockObj) > { > pht.Batch(actions => > { > var putResult = actions.Put(new > PutRequest > { > Key = guid, > ParentVersions = > new ValueVersion[0], > Bytes = > Encoding.ASCII.GetBytes("This is a test string") > }); > actions.Commit(); > }); > } > Console.WriteLine(guid); > } > } > } > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Rhino Tools Dev" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/rhino-tools-dev?hl=en -~----------~----~----~----~------~----~------~--~---
