> Hello Michael,
>
> I'm impressed by your refactorings, and hope some of them can make it into
> the Satoshi codebase.
Thanks:)
> I am however not sure what you've said above is safe. In particular, how do
> you guarantee that no other thread modifies the blockchain structure while
> you are performing your query on it? Does the query code operate on a const
> copy of the structure, or is there guaranteed only one thread accessing it?
The BlockChain class encapsulates all access to the blockchain and only give
you access to certain restricted queries on the chain. Actually that was the
case already in the satoshi client, I have only tried to formalize and
encapsulate these queries in the code instead of having all the code poking
around directly in the database and the blockfile.
I should note that the database still keeps a mutex to protect reads from
writes.
I agree that constness alone does not guarantee thread safety, it is one of the
things to use to get there. Great care should be taken not to read a value that
is being changed at the same time, at least if that will render the result
unusable.
The list of allowed queries are the const public methods of BlockChain. Some
examples :
1. bool isSpent(Coin coin) const;
2. int getNumSpent(uint256 hash) const ;
3. uint256 spentIn(Coin coin) const;
/// Check if the hash of a block belongs to a block in the main chain:
4. bool isInMainChain(const uint256 hash) const;
/// Get the best height
5. int getBestHeight() const { return _bestIndex->nHeight; }
Or e.g.:
6. void getBlock(const uint256 hash, Block& block) const;
1-3. can be used to check if a COutPoint (now Coin) has been spent etc... This
will only generate sane results, even if the two threads are both active on the
same data structures.
Same goes for 4. and 6. copies a block from the block file to the Block&
provided so no issues here either.
I do, however, admit, that an extra review of all the public const methods
would be wise, to ensure that I have not overlooked something. I'll open an
issue on this and use a cold winter night on looking them over again.
Cheers,
Michael
>
> I've been thinking about moving to read-write locks that allow multiple
> threads reading the datastructure simultaneously, but removing the locking
> all together sounds wrong to me.
>
> --
> Pieter
Michael Gronager, PhD
Director, Ceptacle
Jens Juels Gade 33
2100 Copenhagen E
Mobile: +45 31 45 14 01
E-mail: [email protected]
Web: http://www.ceptacle.com/
------------------------------------------------------------------------------
Try before you buy = See our experts in action!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-dev2
_______________________________________________
Bitcoin-development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bitcoin-development