So, I tested it myself with raw sql on my MariaDB and this is what I found out:
session A session B
set transaction isolation level serializable;
start transaction;
select a from t where id = 1;
[result = 1]
update t set a = 2 where id = 1;
[done right away]
select a from t where id = 1;
[result = 2]
set transaction isolation level serializable;
start transaction;
select a from t where id = 1;
[result = 1 ... reading is not blocked]
update t set a = 10 where id = 1;
[suspended ... writing is blocked]
commit;
[... done]
select a from t where id = 1;
[result = 2]
select a from t where id = 1;
[result = 10]
commit;
select a from t where id = 1;
[result = 10]
select a from t where id = 1;
[result = 10]