As per, https://mariadb.com/kb/en/innodb-lock-modes/
An IX lock is not granted if in X or S lock is held. It is granted if an IX or IS lock is held
This means that 2 threads can concurrently hold IX lock.
Again, from doc
An X lock is not granted if any other lock (X, S, IX, IS) is held.
This implies that if 2 threads have IX locks, then it cannot be upgraded to X lock.
I read here that IX locks are only for table level locks and it allows individual rows to still be locked while the IX is head at the table level. This is used to prevent DDL operations while a DML is in progress on that table.
If that's the case, then if 2 threads have IX locks on the table, how will either of them or a 3rd thread be able to acquire a X lock on table for a DDL operation? Does it mean that both the IX locks need to be released for the X lock to be acquired for the DDL operation?