add shared pool

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/performance/trunk@31457 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-MacDonald 2010-10-01 10:55:47 +00:00
parent e3812b5651
commit d3ea09ddac
3 changed files with 37 additions and 2 deletions

View file

@ -1,10 +1,16 @@
2010-10-30 Richard Frith-Macdonald <rfm@gnu.org>
* GSThreadPool.h:
* GSThreadPool.m:
Add new methed to return a shared pool.
2010-09-29 Richard Frith-Macdonald <rfm@gnu.org>
* GSLinkedList.h:
* GSLinkedList.m:
Revise structure and API for greater flexibility.
* GSThreadPool.h
* GSThreadPool.m
* GSThreadPool.h:
* GSThreadPool.m:
Modify for new linked list api.
2010-09-23 Richard Frith-Macdonald <rfm@gnu.org>

View file

@ -48,6 +48,14 @@
NSUInteger processed;
}
/** Returns an instance intended for sharing between sections of code which
* wish to make use of threading by performing operations in other threads,
* but which don't mind operations being interleaved with those belonging to
* oither sections of code.<br />
* Always returns the same instance whenever the method is called.
*/
+ (GSThreadPool*) sharedPool;
/** Waits until the pool of operations is empty or until the specified
* timestamp. Returns YES if the pool was emptied, NO otherwise.
*/

View file

@ -57,10 +57,31 @@
@implementation GSThreadPool
static GSThreadPool *shared = nil;
+ (void) initialize
{
if ([GSThreadPool class] == self)
{
shared = [self new];
}
}
+ (GSThreadPool*) sharedPool
{
return shared;
}
- (void) dealloc
{
GSThreadLink *link;
if (self == shared)
{
[self retain];
[NSException raise: NSInternalInconsistencyException
format: @"[GSThreadPool-dealloc] attempt to deallocate shared pool"];
}
[poolLock lock];
[operations release];
operations = nil;