• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Swift and Threads
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Swift and Threads


  • Subject: Re: Swift and Threads
  • From: "Stephen J. Butler" <email@hidden>
  • Date: Tue, 13 Sep 2016 02:14:58 -0500

This site suggests a version using withUnsafeMutableBufferPointer:

http://blog.human-friendly.com/swift-arrays-are-not-threadsafe

let nbrOfThreads = 8
let step = 2
let itemsPerThread = number * step
let bitLimit = nbrOfThreads * itemsPerThread
var bitfield = [Bool](count: bitLimit, repeatedValue: false)

let queue = dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_HIGH, 0 );

bitfield.withUnsafeMutableBufferPointer { (inout bitfieldBuffer :
UnsafeMutableBufferPointer<Bool>) -> () in
    dispatch_apply( Int(nbrOfThreads), queue ) { ( idx: size_t) -> Void in
        let startIndex = itemsPerThread * Int(idx)
        let endIndex = min( startIndex + itemsPerThread, bitLimit )
        if talk { print("Thread[\(idx)] does \(startIndex) ..<
\(endIndex)") }

        var currIndex = startIndex
        while( currIndex < endIndex )
        {
            bitfieldBuffer[currIndex] = true
            currIndex += step
        }
    }
}


On Tue, Sep 13, 2016 at 1:52 AM, Gerriet M. Denkmann <email@hidden>
wrote:

>
> > 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:
> email@hidden
>
> This email sent to email@hidden
>
_______________________________________________

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


  • Follow-Ups:
    • Re: Swift and Threads
      • From: "Gerriet M. Denkmann" <email@hidden>
References: 
 >Swift and Threads (From: "Gerriet M. Denkmann" <email@hidden>)
 >Re: Swift and Threads (From: Jens Alfke <email@hidden>)
 >Re: Swift and Threads (From: "Gerriet M. Denkmann" <email@hidden>)

  • Prev by Date: Re: Swift and Threads
  • Next by Date: Re: Swift and Threads
  • Previous by thread: Re: Swift and Threads
  • Next by thread: Re: Swift and Threads
  • Index(es):
    • Date
    • Thread