Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • tests/unified_locking/fast.cfa

    r4ae968e r8f1a99e  
     1#include <fstream.hfa>
    12#include <locks.hfa>
     3#include <thread.hfa>
    24
    3 #define LOCK fast_lock
    4 #include "mutex_test.hfa"
     5const unsigned int num_times = 50;
     6
     7struct MutexObj {
     8        fast_lock l;
     9        thread$ * id;
     10        uint32_t sum;
     11};
     12
     13MutexObj mo;
     14
     15void trash() {
     16        unsigned t[100];
     17        for(i; 100) {
     18                t[i] = 0xDEADBEEF;
     19        }
     20}
     21
     22uint32_t cs() {
     23        thread$ * me = active_thread();
     24        uint32_t value;
     25        lock(mo.l);
     26        {
     27                uint32_t tsum = mo.sum;
     28                mo.id = me;
     29                yield(random(5));
     30                value = ((uint32_t)random()) ^ ((uint32_t)me);
     31                if(mo.id != me) sout | "Intruder!";
     32                mo.sum = tsum + value;
     33        }
     34        unlock(mo.l);
     35        return value;
     36}
     37
     38thread LockCheck {
     39        uint32_t sum;
     40};
     41
     42void main(LockCheck & this) {
     43        this.sum = 0;
     44        for(num_times) {
     45                trash();
     46                this.sum += cs();
     47                trash();
     48                yield(random(10));
     49        }
     50}
    551
    652int main() {
    7     test();
     53        uint32_t sum = -32;
     54        mo.sum = -32;
     55        processor p[2];
     56        sout | "Starting";
     57        {
     58                LockCheck checkers[13];
     59                for(i;13) {
     60                        sum += join(checkers[i]).sum;
     61                }
     62        }
     63        sout | "Done!";
     64        if(sum == mo.sum) sout | "Match!";
     65        else sout | "No Match!" | sum | "vs" | mo.sum;
    866}
Note: See TracChangeset for help on using the changeset viewer.