Re: Swift and Threads
Re: Swift and Threads
- Subject: Re: Swift and Threads
- From: "Gerriet M. Denkmann" <email@hidden>
- Date: Tue, 13 Sep 2016 13:52:23 +0700
> On 12 Sep 2016, at 22:49, Jens Alfke <email@hidden> wrote:
>
>
>> On Sep 12, 2016, at 6:42 AM, Gerriet M. Denkmann <email@hidden> wrote:
>>
>> So: is the code ok and the compiler broken in Debug mode?
>> Or is the code fundamentally wrong and that it works in Release is just a fluke?
I tried a variation of my function. This does not crash (not even in Debug builds), but takes twice the memory and is about four times slower:
func markAndTell_2( talk: Bool, number: Int) -> [Bool]
{
[...]
let bitLimit = nbrOfThreads * itemsPerThread
var bitfield = [Bool](count: bitLimit, repeatedValue: false)
var outputSlice0: ArraySlice<Bool> = []
[...]
var outputSlice7: ArraySlice<Bool> = []
let queue = dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_HIGH, 0 );
dispatch_apply( Int(nbrOfThreads), queue,
{ ( idx: size_t) -> Void in
let startIndex = itemsPerThread * Int(idx)
let endIndex = min( startIndex + itemsPerThread, bitLimit )
var tempSlice: ArraySlice<Bool> = bitfield[ startIndex ..< endIndex ]
var currIndex = startIndex
while( currIndex < endIndex )
{
tempSlice[currIndex] = true
currIndex += step
}
switch(idx)
{
case 0: outputSlice0 = tempSlice
[...]
case 7: outputSlice7 = tempSlice
default: print("Thread[\(idx)] does not know where to put its slice")
}
}
)
bitfield = []
bitfield += outputSlice0
[...]
bitfield += outputSlice7
return bitfield
}
Gerriet.
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden