| Commit message (Collapse) | Author | Age | Files | Lines | |
|---|---|---|---|---|---|
| * | Remove unused import | gingerBill | 2021-04-27 | 1 | -1/+0 |
| | | |||||
| * | Implement sync2.Recursive_Mutex using `WaitOnAddress` and friends on Windows | gingerBill | 2021-04-27 | 4 | -37/+151 |
| | | |||||
| * | Max sync2.Sema on windows be `i32` for the counter internally. | gingerBill | 2021-04-27 | 1 | -2/+2 |
| | | |||||
| * | Reimplement sync2.Sema on windows with WaitOnAddress primitives | gingerBill | 2021-04-27 | 4 | -22/+94 |
| | | |||||
| * | Add @(cold) tag | gingerBill | 2021-04-22 | 1 | -0/+1 |
| | | |||||
| * | Fix style issues; Use new attribute `@(cold)` where appropriate in the new ↵ | gingerBill | 2021-04-14 | 1 | -1/+2 |
| | | | | | sync package | ||||
| * | Default to pthreads in sync2 for *nix | gingerBill | 2021-04-13 | 2 | -2/+2 |
| | | |||||
| * | Update sync2 to just use atomic intrinsics rather than the parapoly wrappers | gingerBill | 2021-04-12 | 6 | -233/+137 |
| | | |||||
| * | Remove thread stuff from sync2; Cleanup package thread | gingerBill | 2021-04-11 | 4 | -491/+24 |
| | | |||||
| * | Add Thread stuff to new sync package | gingerBill | 2021-04-11 | 3 | -0/+491 |
| | | |||||
| * | New redesign of core:sync (stored under core:sync/sync2 for the time being) | gingerBill | 2021-04-11 | 9 | -0/+1981 |
| | | |||||
| * | Minimize unneeded casts | gingerBill | 2021-03-03 | 1 | -1/+1 |
| | | |||||
| * | Replace usage of `inline proc` with `#force_inline proc` in the core library | gingerBill | 2021-02-23 | 2 | -16/+16 |
| | | |||||
| * | Fix typo | gingerBill | 2020-12-27 | 1 | -1/+62 |
| | | |||||
| * | Fix sync.Channel code; add `thread.run_with_poly_data` and ↵ | gingerBill | 2020-11-10 | 1 | -13/+11 |
| | | | | | `run_with_poly_data(2|3|4)` procedures | ||||
| * | Improve sync.Channel to encode the direction into the type | gingerBill | 2020-11-09 | 1 | -30/+59 |
| | | |||||
| * | Get Odin compiling and produced exe's running on FreeBSD | Christian Seibold | 2020-09-14 | 3 | -2/+34 |
| | | |||||
| * | Make sync.atomic_* operations use `when` statements instead of `switch`; ↵ | gingerBill | 2020-08-16 | 1 | -146/+111 |
| | | | | | Make `#panic` diverging | ||||
| * | Remove unused entities | gingerBill | 2020-08-02 | 1 | -5/+1 |
| | | |||||
| * | Add sys/windows/synchronization.odin | gingerBill | 2020-08-02 | 1 | -5/+1 |
| | | |||||
| * | Add sync/channel_*.odin files | gingerBill | 2020-08-02 | 2 | -0/+53 |
| | | |||||
| * | Update package sync | gingerBill | 2020-08-02 | 3 | -146/+604 |
| | | |||||
| * | Add `sync.Wait_Group` | gingerBill | 2020-07-15 | 2 | -5/+87 |
| | | |||||
| * | Improve `sync.Channel` behaviour | gingerBill | 2020-07-14 | 1 | -18/+28 |
| | | |||||
| * | Remove fmt from sync/channel.odin | gingerBill | 2020-07-14 | 1 | -1/+0 |
| | | |||||
| * | Update sync.Channel | gingerBill | 2020-07-14 | 1 | -193/+288 |
| | | |||||
| * | Add `sync.Benaphore` | gingerBill | 2020-07-08 | 2 | -2/+34 |
| | | |||||
| * | Add `raw_data` to replace cases in which `&x[0]` was used | gingerBill | 2020-06-29 | 1 | -0/+34 |
| | | |||||
| * | Add `sync.condition_wait_for_timeout` for unix | gingerBill | 2020-06-27 | 1 | -0/+65 |
| | | |||||
| * | Add `sync.Barrier`; Add `sync.Blocking_Mutex` for unix | gingerBill | 2020-06-27 | 4 | -62/+211 |
| | | |||||
| * | Update sys/windows; Add sync.Blocking_Mutex (windows only at the moment) | gingerBill | 2020-06-27 | 1 | -7/+82 |
| | | |||||
| * | Remove `foreign import` for `-vet` | gingerBill | 2020-06-26 | 1 | -2/+0 |
| | | |||||
| * | Keep previous behaviour for `sync` but move to `sys/windows` | gingerBill | 2020-06-26 | 1 | -31/+22 |
| | | |||||
| * | Revert sync_windows.odin | gingerBill | 2020-06-26 | 1 | -47/+33 |
| | | |||||
| * | Revert channel.odin | gingerBill | 2020-06-26 | 1 | -90/+101 |
| | | |||||
| * | Begin migration from sys/win32 to sys/windows | gingerBill | 2020-06-26 | 2 | -134/+137 |
| | | |||||
| * | Update sync.Channel | gingerBill | 2020-06-22 | 1 | -9/+18 |
| | | |||||
| * | `-vet` `sync/channel.odin` | gingerBill | 2020-06-22 | 1 | -0/+2 |
| | | |||||
| * | Add experimental `sync.Channel` | gingerBill | 2020-06-22 | 1 | -0/+246 |
| | | |||||
| * | Fix sync and thread on *nix | gingerBill | 2020-06-22 | 1 | -1/+1 |
| | | |||||
| * | Update `sync.Condition` to require a `^sync.Mutex` on init | gingerBill | 2020-06-22 | 2 | -35/+69 |
| | | |||||
| * | Improve termination rules checking for missing `return`; Make diverging ↵ | gingerBill | 2020-06-06 | 1 | -8/+0 |
| | | | | | procedure `-> !` be terminators | ||||
| * | Enforce explicit context definition for procedure calls | gingerBill | 2020-05-14 | 1 | -13/+13 |
| | | |||||
| * | Merge branch 'master' into fix-sync-badopt | Tetralux | 2020-04-22 | 1 | -4/+5 |
| |\ | |||||
| | * | `sync.yield_processor` -> `sync.cpu_relax`; have it call `intrinsics.cpu_relax` | Tetralux | 2020-04-21 | 1 | -4/+5 |
| | | | |||||
| * | | Fix potential bad optimization bug in sync.Ticket_Mutex | Tetralux | 2020-04-21 | 1 | -1/+1 |
| |/ | | | | | When locking, we were not loading m.serving atomically and so the optimizer could have hoisted the check out of the loop, thus resulting in an infinite loop. | ||||
| * | replaced pthread_yield with ssched_yield, fixed semaphore post:q | KTRosenberg | 2020-01-02 | 2 | -4/+9 |
| | | |||||
| * | Add `thread.Pool` with example in demo.odin; Update linalg to support ↵ | gingerBill | 2020-01-02 | 1 | -1/+1 |
| | | | | | handness changes for projection matrices | ||||
| * | Implement `#complete switch` by default, replace with `#partial switch` #511 | gingerBill | 2019-12-22 | 1 | -11/+11 |
| | | |||||
| * | Implement core:thread and core:sync on Unix using pthreads | Tetralux | 2019-12-01 | 5 | -133/+203 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Also do some cleanup and refactoring of the thread, sync and time APIs. - remove 'semaphore_release' because 'post' and 'wait' is easier to understand - change 'semaphore_wait' to '*_wait_for' to match Condition - pthreads can be given a stack, but doing so requires the user to set up the guard pages manually. BE WARNED. The alignment requirements of the stack are also platform-dependant; it may need to be page size aligned on some systems. Unclear which systems, however. See 'os.get_page_size', and 'mem.make_aligned'. HOWEVER: I was unable to get custom stacks with guard pages working reliably, so while you can do it, the API does not support it. - add 'os.get_page_size', 'mem.make_aligned', and 'mem.new_aligned'. - removed thread return values because windows and linux are not consistent; windows returns 'i32' and pthreads return 'void*'; besides which, if you really wanted to communicate how the thread exited, you probably wouldn't do it with the thread's exit code. - fixed 'thread.is_done' on Windows; it didn't report true immediately after calling 'thread.join'. - moved time related stuff out of 'core:os' to 'core:time'. - add 'mem.align_backward' - fixed default allocator alignment The heap on Windows, and calloc on Linux, both have no facility to request alignment. It's a bit of hack, but the heap_allocator now overallocates; `size + alignment` bytes, and aligns things to at least 2. It does both of these things to ensure that there is at least two bytes before the payload, which it uses to store how much padding it needed to insert in order to fulfil the alignment requested. - make conditions more sane by matching the Windows behaviour. The fact that they were signalled now lingers until a thread tries to wait, causing them to just pass by uninterrupted, without sleeping or locking the underlying mutex, as it would otherwise need to do. This means that a thread no longer has to be waiting in order to be signalled, which avoids timing bugs that causes deadlocks that are hard to debug and fix. See the comment on the `sync.Condition.flag` field. - add thread priority: `thread.create(worker_proc, .High)` | ||||