Hello Thomas,
On 23/11/16 15:38, Thomas Preudhomme wrote:
Hi Sebastian,
I was thinking on how to solve this issue and found two possible solutions:
1) select size of lock at configure time
Instead of being an enable/disable option the configure option could take an
integer value N that determine the size of lock, default being the size of a
pointer. The lock would then be defined as an array of N integers.
Pro: LOCK_INIT works, simpler & smaller change
Cons: lock needs to be as big as the biggest lock among all the platforms you
want to target wasting a bit of space.
2) Remove static initialization of locks
Remove all LOCK_INIT and add code as required to call lock_initialize at start
up time.
Pro: you only pay the size for the lock you need (ie nothing except empty
functions in the single threaded case)
Cons: much bigger work, start up cannot support multithread
3)
struct _lock;
typedef struct _lock *_LOCK_T;
#define __LOCK_INIT(class, lock) extern struct _lock _lock_ ## lock; class
_LOCK_T lock = &_lock_ ## lock;
The OS must then provide struct _lock and storage for all statically initialized
locks.