Changeset cd5b58f


Ignore:
Timestamp:
Oct 31, 2022, 3:00:01 PM (2 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, ast-experimental, master
Children:
7f3b5ce
Parents:
637c139
Message:

Changed node link in thread to use dlink called cltr_link

Location:
libcfa/src
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/bits/defs.hfa

    r637c139 rcd5b58f  
    3131#define __cfa_anonymous_object(x) inline struct x
    3232#define __cfa_dlink1(x) dlink(x)
     33#define __cfa_dlink2(x, name) inline struct name { inline dlink(x); }
    3334#else
    3435#define __cfa_anonymous_object(x) struct x __cfa_anonymous_object
    3536#define __cfa_dlink1(x) struct { struct x * next; struct x * back; }
     37#define __cfa_dlink2(x, name) struct { struct x * next; struct x * back; } __dlink ## name
    3638#endif
    3739
  • libcfa/src/concurrency/invoke.h

    r637c139 rcd5b58f  
    195195                struct __monitor_group_t monitors;
    196196
    197                 // used to put threads on dlist data structure
     197                // intrusive link fields, used for locks, monitors and any user defined data structure
     198                // default link fields for dlist
    198199                __cfa_dlink1(thread$) user_link;
    199200
    200                 struct {
    201                         struct thread$ * next;
    202                         struct thread$ * prev;
    203                 } node;
     201                // secondary intrusive link fields, used for global cluster list
     202                // default link fields for dlist
     203                __cfa_dlink2(thread$, cltr_link);
    204204
    205205                // used to store state between clh lock/unlock
     
    230230        #ifdef __cforall
    231231        extern "Cforall" {
     232                static inline thread$ * volatile & ?`next ( thread$ * this ) {
     233                        return this->user_link.next;
     234                }
    232235
    233236                static inline thread$ *& get_next( thread$ & this ) __attribute__((const)) {
    234237                        return this.user_link.next;
    235                 }
    236 
    237                 static inline [thread$ *&, thread$ *& ] __get( thread$ & this ) __attribute__((const)) {
    238                         return this.node.[next, prev];
    239238                }
    240239
     
    244243                        return result;
    245244                }
     245
     246                P9_EMBEDDED(thread$, thread$.cltr_link)
     247                P9_EMBEDDED(thread$.cltr_link, dlink(thread$))
    246248
    247249                static inline void ?{}(__monitor_group_t & this) {
  • libcfa/src/concurrency/kernel.hfa

    r637c139 rcd5b58f  
    256256        // List of threads
    257257        __spinlock_t thread_list_lock;
    258         __dllist_t(struct thread$) threads;
     258        dlist(struct thread$, thread$.cltr_link) threads;
    259259        unsigned int nthreads;
    260260
  • libcfa/src/concurrency/kernel/startup.cfa

    r637c139 rcd5b58f  
    535535        #endif
    536536
    537         node.next = 0p;
    538         node.prev = 0p;
    539537        doregister(curr_cluster, this);
    540538
     
    659657        #endif
    660658
    661         threads{ __get };
     659        threads{};
    662660
    663661        io.arbiter = create();
     
    739737        lock      (cltr->thread_list_lock __cfaabi_dbg_ctx2);
    740738        cltr->nthreads += 1;
    741         push_front(cltr->threads, thrd);
     739        insert_first(cltr->threads, thrd);
    742740        unlock    (cltr->thread_list_lock);
    743741}
     
    745743void unregister( cluster * cltr, thread$ & thrd ) {
    746744        lock  (cltr->thread_list_lock __cfaabi_dbg_ctx2);
    747         remove(cltr->threads, thrd );
    748         cltr->nthreads -= 1;
     745        {
     746                tytagref( dlink(thread$), dlink(thread$) ) ?`inner( thread$ & this ) = void;
     747                with( DLINK_VIA( thread$, thread$.cltr_link ) )
     748                        remove( thrd );
     749                cltr->nthreads -= 1;
     750        }
    749751        unlock(cltr->thread_list_lock);
    750752}
  • libcfa/src/concurrency/thread.cfa

    r637c139 rcd5b58f  
    5454        #endif
    5555
    56         node.next = 0p;
    57         node.prev = 0p;
    58 
    5956        clh_node = malloc( );
    6057        *clh_node = false;
Note: See TracChangeset for help on using the changeset viewer.